你好。
我有一个示例 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>
使用 SAAJ API 在 JAVA 中形成 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");
结果我收到这样的 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>
一切都很好,但是属性“ http://examples/2001 ”“ http://newsite/mon ”的值在某处消失了。
我的错误是什么以及如何解决这个问题?
结果如下
MessageFactory messageFactory = MessageFactory.newInstance(); SOAPMessage soapMessage = messageFactory.createMessage(); // 检索不同的部分 SOAPPart soapPart = soapMessage.getSOAPPart(); SOAPEnvelope soapEnvelope = soapMessage.getSOAPPart().getEnvelope(); soapEnvelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema"); soapEnvelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance"); // 提取header的两种方式 // SOAPHeader soapHeader = soapEnvelope.getHeader(); // soapHeader = soapMessage.getSOAPHeader(); // 两种提取body的方法 SOAPBody soapBody = soapEnvelope.getBody(); soapBody = soapMessage.getSOAPBody(); // 添加一些元素 SOAPElement GetParamter=soapBody.addBodyElement(new javax.xml.namespace.QName("http://examples/2001", "GetParamter")); GetParamter = GetParamter.addChildElement(new javax.xml.namespace.QName("request")); SOAPElement MonCode=GetParamter.addChildElement(new javax.xml.namespace.QName("http://newsite/mon", "MonCode")); MonCode.addTextNode("延迟"); SOAPElement TimeFrom=GetParamter.addChildElement(new javax.xml.namespace.QName("http://newsite/mon", "TimeFrom")); TimeFrom.addTextNode("2016-10-26T11:00"); SOAPElement TimeTo=GetParamter.addChildElement(new javax.xml.namespace.QName("http://newsite/mon", "TimeTo")); TimeTo.addTextNode("2016-10-26T12:00");生成的 SOAP 请求