1

SoapUI を使用して、次の XML エンベロープを作成し、文字列にカプセル化しました。

ProcessJournal は、パラメーターを持たず、文字列を返すメソッドです。

String soapText = "<Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:upd=\"http://webservices.vm.vmc/UpdateCMA/\">" +
                    "<Header/>" +
                     "<Body>" +
                       "<upd:ProcessJournal/>" +
                     "</Body>" +
                  "</Envelope>";

さて...上記で定義した Web サービスを呼び出したいだけです。そして、そうするためのサンプルコードを見つけました

                // Create SoapMessage
                MessageFactory msgFactory     = MessageFactory.newInstance();
                SOAPMessage message           = msgFactory.createMessage();
                SOAPPart soapPart             = message.getSOAPPart();

                // Load the SOAP text into a stream source
                byte[] buffer                 = soapText.getBytes();
                ByteArrayInputStream stream   = new ByteArrayInputStream(buffer);
                StreamSource source           = new StreamSource(stream);

                // Set contents of message 
                soapPart.setContent(source);

                // -- DONE
                message.writeTo(System.out);


                //Try accessing the SOAPBody
                SOAPBody soapBody = message.getSOAPBody();

問題は、message.getSOAPBody(); でエラーが発生することです。

XML-22103: (Fatal Error) DOMResult can not be this kind of node.
Apr 16, 2013 12:05:06 PM com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory createEnvelope
SEVERE: SAAJ0511: Unable to create envelope from given source

私が見つけたさまざまなサンプルはすべて、 getSOAPBody() が実行されたときに同じタイプのエラーが発生します。

4

2 に答える 2

1

問題は、soapText の名前空間のプレフィックスにあるようです。次のようにsoapTextを変更するだけで、エラーが発生せず、TransformerFactoryを手動で設定することなく、例を実行できました。

String soapText = 
     "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:upd=\"http://webservices.vm.vmc/UpdateCMA/\">" +
        "<soapenv:Header/>" +
        "<soapenv:Body>" +
          "<upd:ProcessJournal/>" +
        "</soapenv:Body>" +
     "</soapenv:Envelope>";

Soap サービス名前空間のupdプレフィックスとは対照的に、すべての Soap 要素に追加されたsoapenv:プレフィックスに注意してください。

于 2014-01-24T16:00:59.057 に答える