Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java发送XML字符串_Java_Xml_Soap - Fatal编程技术网

Java发送XML字符串

Java发送XML字符串,java,xml,soap,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.as

您好,我需要发送一个带有字符串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) { }
最终字符串SOAP\u ACTION=”http://tempuri.org/Search";
最终字符串方法\u NAME=“搜索”;
最终字符串名称\u空格=”http://tempuri.org/";
最终字符串URL=”https://www.url.com/xxx/xxx.asmx?wsdl";
字符串XML=”“+paramId+“”+paramfhone+“”;
SoapObject请求=新的SoapObject(名称\空间、方法\名称);
addProperty(“,XML)//我不知道怎么通过这里
SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(请求);
HttpTransportSE httpTransport=新的HttpTransportSE(URL);
试一试{
调用(SOAP_操作,信封);
Object res=envelope.getResponse();
if(res instanceof SoapPrimitive){
return(((SoapPrimitive)res.toString());
}
返回字符串.valueOf(res);
}catch(IOException | XmlPullParserException ex){}
但我得到了一个错误:

SoapFault-故障代码:
'soap:Server'faultstring:'服务器无法处理请求。
--->对象引用未设置为对象的实例。“
faultactor:“null”详细信息:org.kxml2.kdom。Node@16050315


提前感谢。

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

如果字符串参数包含XML元素,则它们是URL编码的,至少as是 在您的情况下,如果仅通过简单的字符串替换对字符串参数执行此操作,则应该会有所帮助:

XML = XML.replace("<", "&lt;");
XML = XML.replace(">", "&gt;");
request.addProperty("", XML); //now encoded, but server will understand!
XML=XML.replace(“,”);
addProperty(“,XML)//现在已编码,但服务器将理解!

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

使用wsimport构造客户端:

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

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

使用Axis2构建客户端。
示例来自:

短篇故事:

  • 如果尚未下载并解压缩ApacheAxis2标准发行版,请下载并解压缩
  • 使用以下命令创建客户端存根(假设当前工作目录中有Axis2UserGuide.wsdl文件):
  • %AXIS2\u HOME%\bin\WSDL2Java-uri Axis2UserGuide.wsdl-p org.apache.AXIS2.Axis2UserGuide-d adb-s

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

  • 通过键入:antjar.client构建客户机

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


  • 仅供参考:您不会将SOAP消息发送到
    ?wsdl
    URL。
    ?wsdl
    URL用于检索Web服务终结点的wsdl。您从服务器收到一条错误消息,表示服务器遇到NullPointerException(或等效项)。您应该检查服务器代码和/或日志文件以了解更多详细信息。仅供参考:使用字符串连接构建XML是一个非常糟糕的主意,除非您自己处理XML转义。如果有人输入了
    好的,我减去了?wsdl,那么您将得到糟糕的XML,但是我如何在?中传递数据呢????