1

我想收到如下所示的消息:

<?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();
        }
    }
}
4

1 回答 1

0

编辑:

我尝试了您的代码,但您缺少引号和 de '?在您的结尾字符串中:

String stdEncode = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
于 2013-02-03T17:50:30.223 回答