Java-使用字符串XML信封中的SOAP Web服务

Java-使用字符串XML信封中的SOAP Web服务,java,xml,web-services,soap,envelope,Java,Xml,Web Services,Soap,Envelope,我使用SoapUI构建了以下XML信封,并将其封装在字符串中 ProcessJournal是一个没有参数并返回字符串的方法 String soapText = "<Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:upd=\"http://webservices.vm.vmc/UpdateCMA/\">" + "<Header/>"

我使用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>";
问题是,在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()时都会出现相同类型的错误。

我不知道您是否找到了解决此问题的方法。我最近看到了完全相同的错误,这是因为没有设置TransformerFactory

我使用了Saxon库中的TransformerFactory——可以获得它的jar

然后,我设置了一个引用Saxon TransformerFactory的系统属性:

System.setProperty("javax.xml.transform.TransformerFactory",    
        "net.sf.saxon.TransformerFactoryImpl");
当我重新运行代码时,错误就消失了


以上只是设置TransformerFactory的一种方法。我在这里找到了许多其他的方法:

看起来问题在于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>";
String soapText=
"" +
"" +
"" +
"" +
"" +
"";

请注意,与Soap服务命名空间中的upd前缀相比,所有Soap元素中都添加了soapenv:前缀。

谢谢您的帖子。因为没人能让它工作,我们最终走了另一条路。但是,当需要再次尝试时,我会尝试您的建议:)谢谢!
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>";