我希望得到一个消息,看起来像这样:在SOAPBodyElement上删除Body属性/前缀,我该怎么办?
<?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>
,但得到的消息,看起来像这样(要摆脱的xmlns =“的” subscriberCreate后):
<?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();
}
}
}
更改此行? 'SOAPBodyElement element = body.addBodyElement(env.createName(“createSubscriber”));' –
想要摆脱文本** xmlns =“”**!但是,无论如何感谢 – user1715352