Java发送XML字符串

时间:2017-01-27 20:31:09

标签: java xml soap

您好我需要使用字符串XML发送请求,我正在尝试这种方式:

final String SOAP_ACTION     = "http://tempuri.org/Search";
final String METHOD_NAME     = "Search";
final String NAME_SPACE      = "http://tempuri.org/";
final String URL             = "https://www.url.com/xxx/xxx.asmx?wsdl";
String       XML             = "<data><id>"+ paramId +"</id><phone>"+ paramPhone +"</phone></data>";
SoapObject request           = new SoapObject(NAME_SPACE, METHOD_NAME);
request.addProperty("", XML); //I don't know how to pass it here
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet                             = true;
envelope.setOutputSoapObject(request);
HttpTransportSE             httpTransport   = new HttpTransportSE(URL);
try {
        httpTransport.call(SOAP_ACTION, envelope);
        Object res = envelope.getResponse();
        if (res instanceof SoapPrimitive ) {
            return (((SoapPrimitive) res).toString());
        }
        return String.valueOf(res);
    } catch (IOException | XmlPullParserException ex) { }

但是我收到了这个错误:

  

SoapFault - faultcode:
  'soap:Server'faultstring:'服务器无法处理请求   ---&GT;对象引用未设置为对象的实例   faultactor:'null'详细信息:org.kxml2.kdom.Node@16050315

提前致谢。

2 个答案:

答案 0 :(得分:0)

在Java中,您可以使用wsimport为您创建SOAP存根。这使得它变得更容易。存根已经为您完成了一些转换任务。

如果String参数包含XML元素,则它们是URL编码的,至少是&lt;是编码广告&lt; lt;并且&gt; as&amp; gt; 在您的情况下,如果您使用简单的字符串替换对字符串参数执行此操作应该会有所帮助:

XML = XML.replace("<", "&lt;");
XML = XML.replace(">", "&gt;");
request.addProperty("", XML); //now encoded, but server will understand!

答案 1 :(得分:0)

尝试使用wsimport或像Axis2这样的第三方库来创建jar客户端,该客户端将轻松地将您的bean转换为格式良好的XML请求。

使用wsimport构建客户端:

在开始之前,您可以在$ JDK / bin文件夹中找到wsimport工具。

 wsimport -keep -verbose https://www.url.com/xxx/xxx.asmx?wsdl


使用Axis2构建客户端。
site的示例:

  

短篇小说:

     
      
  1. 下载并解压缩Apache Axis2标准发行版(如果您尚未完成)。
  2.   
  3. 使用以下命令创建客户端存根(假设您当前工作目录中有Axis2UserGuide.wsdl文件):
  4.         

    %AXIS2_HOME%\bin\WSDL2Java -uri Axis2UserGuide.wsdl -p org.apache.axis2.axis2userguide -d adb -s

         
        
    1. 创建客户端(例如,Client.java),这是一个使用生成的存根的Java应用程序,并将其保存在org / apache / axis2 / axis2userguide目录中。

    2.   
    3. 输入以下命令构建客户端:ant jar.client。

    4.   
    5. 假设您有相应的服务,请通过将位于build / lib中的生成的Axis2UserGuideService-test-client.jar文件添加到类路径来运行客户端,并键入:java org.apache.axis2.axis2userguide.Client < / p>

    6.