我想收到如下所示的消息:
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"
xmlns="http://website.com/">
<S:Header/>
<S:Body>
<subscriberCreate>
<assignedId>Some ID</assignedId>
</subscriberCreate>
</S:Body>
</S:Envelope>
但收到一条看起来像这样的消息(想要在subscriberCreate 之后摆脱 xmlns=""):
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"
xmlns="http://website.com/">
<S:Header/>
<S:Body>
<subscriberCreate xmlns="">
<assignedID>Some ID</assignedID>
</createSubscriber>
</S:Body>
</S:Envelope>
有谁知道该怎么做才能解决这个问题?body 元素是否继承信封的属性,因为当我更改它们的顺序时,消息消失了!谢谢!
我的 Java 代码如下所示:
import java.io.FileOutputStream;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;
public class CreateSubscriber {
public static void main(String[] args) {
try{
SOAPMessage sm = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage();
SOAPEnvelope env = sm.getSOAPPart().getEnvelope();
env.setPrefix("S");
env.removeNamespaceDeclaration("env");
sm.getSOAPHeader().setPrefix("S");
SOAPBody body = sm.getSOAPBody();
body.setPrefix("S");
SOAPBodyElement element = body.addBodyElement(env.createName("createSubscriber"));
env.setAttribute("xmlns","http://psm.proceranetworks.com/soap/3.1/message");
element.addChildElement("assignedID").addTextNode("Some ID");
FileOutputStream fOut = new FileOutputStream("SoapMessage.xml");
String stdEncode = "<xml version= 1.0 encoding= utf-8>";
System.out.print(stdEncode);
sm.writeTo(System.out);
fOut.write(stdEncode.getBytes());
sm.writeTo(fOut);
System.out.println();
System.out.println("SOAP msg created");
}catch(Exception e){
e.printStackTrace();
}
}
}