刚接触soap,有几点疑问。
1.客户端发请求到服务器,会写一个xml,在这个xml里面有请求的urn,方法,参数等,是不是要解析这个xml读取里面的这些信息后去请求?若不是这样,一般是怎么用的?2.服务器端返回的信息怎么和一个xml文件关联,这个xml一般会怎么处理?
1.客户端发请求到服务器,会写一个xml,在这个xml里面有请求的urn,方法,参数等,是不是要解析这个xml读取里面的这些信息后去请求?若不是这样,一般是怎么用的?2.服务器端返回的信息怎么和一个xml文件关联,这个xml一般会怎么处理?
调用函数名
设置参数
得到结果以上是客户端的调用的一般过程。xml不用你去解析,发布的服务是个wsdl文件,客户端连接的时候会自己解析此文件提取或者封装数据。服务器返回也是xml文件 解析也不用你管
这样 就使用JAX-RPC。
JAX - RPC :Java APIs for XML-Based Remote Procedure Call. 它本质上是另一种RMI。 只是 JAX-RPC 以 SOAP 作为通信协议, RMI 以 RMI- IIOP或者 RMI - JRMP为通信协议。 简单对象访问协议(SOAP)提供了标准的RPC方法来调用你的WebService。SOAP规范定义了SOAP消息的格式,以及怎样通过Http协议来使用SOAP。SOAP也是基于XML和XSD的,XML是SOAP的数据编码格式。
1.如果你收发的request response不是什么复杂的结构,你可以直接用UrlConnection发送请求,用string或者正则表达式解析responsepublic void sendXML(String filePath,String _url) throws Exception{
String urlString = _url;
String xmlFile = filePath;
URL url = new URL(urlString); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();; File fileToSend=new File(xmlFile);
byte[] buf=new byte[(int)fileToSend.length()];
new FileInputStream(xmlFile).read(buf);
httpConn.setRequestProperty( "Content-Length",String.valueOf( buf.length ) );
httpConn.setRequestProperty("Content-Type","text/xml; charset=utf-8");
httpConn.setRequestProperty("SOAPAction","your SOAPAction");
httpConn.setRequestProperty("Accept","text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2");
httpConn.setRequestMethod( "POST" );
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
OutputStream out = httpConn.getOutputStream();
out.write( buf );
out.close();
InputStreamReader isr = new InputStreamReader(httpConn.getInputStream(),"utf-8");
BufferedReader in = new BufferedReader(isr);
String inputLine;
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("result.xml")));
while ((inputLine = in.readLine()) != null){
System.out.println(inputLine);
bw.write(inputLine);
bw.newLine();
}
bw.close();
in.close();
}
2.如果方法一不能满足你的需求
你就得根据 WSDL文件来生成 WSDL SOAP Stub Functions和wsdl定义的 objects,然后调用. 推荐你直接用jdk1.6 bin目录下的 wsimport(这样无需axis这样的第三方的东西)
例如wsimport -d ./bin -s ./src -p test.jws.client.ref http://127.0.0.1:8080/webservice/hws?wsdl如何调用这里说不清楚,你搜个例子看看会比较直观,也很简单。
给个需求大家帮我看:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:corpBinding soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="http://eaaapi.eaa.eidc.huawei.com">
<msg xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
协议数据单元PDU</msg>
</ns1:corpBinding>
</soapenv:Body>
</soapenv:Envelope>PDU组成 描述
Message Header 消息头
Message Body 消息体
消息头和消息体在xml中的表现形式如下:
<?xml version="1.0" encoding="UTF-8"?>
< MSG >
<HEAD>
< Attribute1>消息头属性一</Attribute1>
</HEAD>
<BODY>加密后的消息体</BODY>
接口描述
我们用WSDL(Web Services Description Language)来对接口进行描述。
基本协议
双方的消息交互采用SOAP
需求就是这样,客户急着要马上做出来,而我第一次接触这个,求解决方案!!