2016-02-09 23 views
1

这是在SOAPUI中显示的WSDL中使用的XML。如何在java中将值传递给xsd:string RPC编码的SOAP 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] 

回答

0

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

将生成的XML与SOAP UI中正在使用的XML进行比较。

@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); 
     } 

我希望这会有所帮助。

+0

非常感谢。它的效果很好。 – Thushara

相关问题