gpt4 book ai didi

java - 如何使用 SAAJ API 创建 SOAP 请求

转载 作者:行者123 更新时间:2023-11-30 02:45:40 24 4
gpt4 key购买 nike

我知道我可能会问一个简单的问题,但无法正确创建所需的 SOAP 请求格式。

此类 SOAP 请求

         <?xml version="1.0" encoding="UTF-8" ?>
<SOAP:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP:Body>
<GetParameter xmlns="http://examples/2001">
<request>
<MonCode xmlns="http://newsite/mon">Latency</MonCode>
<TimeFrom xmlns="http://newsite/mon">2016-10-26T11:00</TimeFrom>
<TimeTo xmlns="http://newsite/mon">2016-10-26T12:00</TimeTo>
</request>
</GetParameter>
</SOAP:Body>
</SOAP:Envelope>

我尝试使用 Java 的 SAAJ API 创建 SOAP 请求。我发现了一些问题: Java Generate SOAP Envelope

Working Soap client example

但不明白如何为我的事件创建 SOAP 请求。

请帮助创建 SOAP 请求。

附:试试这个代码

            MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage message = messageFactory.createMessage();
SOAPPart soapPart = message.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");
envelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");
envelope.addNamespaceDeclaration("soap", "http://schemas.xmlsoap.org/soap/envelop/");

SOAPBody body = message.getSOAPBody();
SOAPElement bodyElement = body.addChildElement("GetParameter");
bodyElement.setAttribute("xmlns", "http://examples/2001");
bodyElement = body.addChildElement("request");
SOAPElement paramsElement = bodyElement.addChildElement("MonCode");
paramsElement.setAttribute("xmlns", "http://newsite/mon");
paramsElement.addTextNode("Latency");
paramsElement = bodyElement.addChildElement("TimeFrom");
paramsElement.setAttribute("xmlns", "http://newsite/mon");
paramsElement.addTextNode("2016-10-26T11:00");
paramsElement = bodyElement.addChildElement("TimeTo");
paramsElement.setAttribute("xmlns", "http://newsite/mon");
paramsElement.addTextNode("2016-10-26T12:00");

但是在结果中得到没有值“http://examples/2001”“http://newsite/mon”的SOAP请求。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelop/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Header/>
<SOAP-ENV:Body>
<GetParameter xmlns=""/>
<request>
<MonCode xmlns="">Latency</MonCode>
<TimeFrom xmlns="">2016-10-26T11:00</TimeFrom>
<TimeTo xmlns="">2016-10-26T12:00</TimeTo>
</request>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

如何解决这个问题?

最佳答案

我认为使用Java SAAJ不简单,使用不灵活

这个解决方案更好

   public static void main(String args[]) throws Exception {

String addr = "http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx";
String request = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:example=\"http://ws.cdyne.com/\"><SOAP-ENV:Header/><SOAP-ENV:Body>\n" +
"<example:VerifyEmail><example:email>mutantninja@gmail.com</example:email>\n" +
"<example:LicenseKey>123</example:LicenseKey></example:VerifyEmail>\n" +
"</SOAP-ENV:Body></SOAP-ENV:Envelope>";

URL url = null;
try {
url = new URL(addr);
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
HttpURLConnection connection = null;
try {
connection = (HttpURLConnection) url.openConnection();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
connection.setRequestProperty("Content-Length", String.valueOf(request.length()));
connection.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("SoapAction", "http://ws.cdyne.com/VerifyEmail");
connection.setDoOutput(true);
PrintWriter pw = null;
try {
pw = new PrintWriter(connection.getOutputStream());
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
pw.write(request);
pw.flush();

try {
connection.connect();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
BufferedReader rd = null;
try {
rd = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String line;
String respond = "";
try {
respond = rd.readLine();
while ((line = rd.readLine()) != null)
respond = line;

} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println(respond);
}

关于java - 如何使用 SAAJ API 创建 SOAP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40277451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com