如何将值传递给 java 中的 xsd:string RPC 编码的 SOAP xml 参数?

How to pass a value to xsd:string RPC encoded SOAP xml parameter in java?

这是在 SOAPUI 中显示的 WSDL 中使用的 XML。

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bran="BDetail">
   <soapenv:Header/>
   <soapenv:Body>
      <bran:sentIbBTyp soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <pBnCode xsi:type="xsd:string">234</pBnCode>
      </bran:sentIbBTyp>
   </soapenv:Body>
</soapenv:Envelope>

我使用这个 java 代码来传递值

MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();

SOAPPart soapPart = soapMessage.getSOAPPart();
SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
soapEnvelope.addNamespaceDeclaration("xsd",
        "http://www.w3.org/2001/XMLSchema");
soapEnvelope.addNamespaceDeclaration("xsi",
        "http://www.w3.org/2001/XMLSchema-instance");
soapEnvelope.addNamespaceDeclaration("bran", "BDetail");
SOAPBody soapBody = soapEnvelope.getBody();

SOAPElement soapElement = soapBody.addChildElement(
        "sentIbBTyp", "bran");
soapElement
        .setEncodingStyle("http://schemas.xmlsoap.org/soap/encoding/");

SOAPElement elementBankCode = soapElement.addChildElement("pBnCode");
elementBankCode.setValue("234");

我遇到了这个错误。请帮助我...

SOAP error No Deserializer found to deserialize a ':pBnCode' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/'. [java.lang.IllegalArgumentException]

以下代码可能会有所帮助。检查其他 QName 构造函数并使用适当的构造函数。

将生成的 XML 与 SOAP 中的工作 UI 进行比较。

@Test
        public void test() throws Exception {
            MessageFactory messageFactory = MessageFactory.newInstance();
            SOAPMessage soapMessage = messageFactory.createMessage();

            SOAPPart soapPart = soapMessage.getSOAPPart();
            SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
            soapEnvelope.addNamespaceDeclaration("xsd",
                    "http://www.w3.org/2001/XMLSchema");
            soapEnvelope.addNamespaceDeclaration("xsi",
                    "http://www.w3.org/2001/XMLSchema-instance");
            soapEnvelope.addNamespaceDeclaration("bran", "BDetail");
            SOAPBody soapBody = soapEnvelope.getBody();

            SOAPElement soapElement = soapBody.addChildElement(
                    "sentIbBTyp", "bran");

            soapElement
                    .setEncodingStyle("http://schemas.xmlsoap.org/soap/encoding/");
            SOAPElement elementBankCode = soapElement.addChildElement("pBnCode");
            // added missing attribute
            QName qname = new QName("xsi:type");
            elementBankCode.addAttribute(qname, "xsd:string");

            elementBankCode.setValue("234");

            soapMessage.writeTo(System.out);
        }

希望对您有所帮助。