Java 为SOAP消息体添加命名空间

Java 为SOAP消息体添加命名空间,java,xml,soap,xml-namespaces,soapheader,Java,Xml,Soap,Xml Namespaces,Soapheader,我想为SOAPbody中的所有项目添加名称空间,下面是与XML操作相关的配置。我为头部添加了名称空间,但它没有到达SOAP body Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); if (outboundProperty.booleanValue()) { SOAPMessage message = smc.getMessa

我想为SOAPbody中的所有项目添加名称空间,下面是与XML操作相关的配置。我为头部添加了名称空间,但它没有到达SOAP body

Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);

        if (outboundProperty.booleanValue()) { 
            SOAPMessage message = smc.getMessage(); 
            try {

                SOAPEnvelope envelope = smc.getMessage().getSOAPPart().getEnvelope();
                System.out.println("Envelop : "+envelope);

                envelope.addNamespaceDeclaration("sch", "http://api.jasperwireless.com/ws/schema");

                SOAPHeader header = envelope.addHeader();

                SOAPElement security =
                        header.addChildElement("Security", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");

                SOAPElement usernameToken =
                        security.addChildElement("UsernameToken", "wsse");
                usernameToken.addAttribute(new QName("xmlns:wsu"), "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");

                SOAPElement username =
                        usernameToken.addChildElement("Username", "wsse");
                username.addTextNode("XXXXXXXXX");

                SOAPElement password =
                        usernameToken.addChildElement("Password", "wsse");
                password.setAttribute("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
                password.addTextNode("XXXXXXXXXXXXXX");

                //Print out the outbound SOAP message to System.out
                message.writeTo(System.out);
                System.out.println("");

            } catch (Exception e) {
                e.printStackTrace();
            }
下面是根据上述代码创建的XML

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://api.jasperwireless.com/ws/schema">
        <S:Header>
            <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
                <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                    <wsse:Username>XXXXXX</wsse:Username>
                    <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">XXXXXXX</wsse:Password>
                </wsse:UsernameToken>
            </wsse:Security>
        </S:Header>
        <S:Body>
            <GetTerminalsByMsisdnRequest xmlns="http://api.jasperwireless.com/ws/schema">
                <messageId>my message</messageId>
                <version>1.3</version>
                <licenseKey>537bba2a-9406-4703-a900-a8fee7a3f310</licenseKey>
                <msisdns>
                    <msisdn>65144099016324</msisdn>
                </msisdns>
            </GetTerminalsByMsisdnRequest>
        </S:Body>
    </S:Envelope> 

XXXXXX
XXXXXXX
我的留言
1.3
537bba2a-9406-4703-a900-a8fee7a3f310
65144099016324
但我想像下面的示例一样生成它。我对java和SOAP完全陌生请帮助我

<S:Body>
            <sch:GetTerminalsByMsisdnRequest xmlns="http://api.jasperwireless.com/ws/schema">
                <sch:messageId>my message</messageId>
                <sch:version>1.3</version>
                <sch:licenseKey>537bba2a-9406-4703-a900-a8fee7a3f310</licenseKey>
                <sch:msisdns>
                    <sch:msisdn>65144099016324</msisdn>
                </sch:msisdns>
            </sch:GetTerminalsByMsisdnRequest>
        </S:Body>

我的留言
1.3
537bba2a-9406-4703-a900-a8fee7a3f310
65144099016324

对不起,3年后我看到了这一点。SOAP包含主体和头。如果您不指定标题的内容,则无法确定标题是否为空。