我在使用Java的 WebServices 审讯中相当新,我有以下问题。
我有一个网络服务,它提供了一个 getConfigSettings()方法,通过它的响应,告诉我一些信息,包括用户是否在某项服务上启用(它说如果这对夫妇用户名和密码是正确的,并且用户可以登录系统。)
特别是 getConfigSettings()方法的 REQUEST :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<tem:getConfigSettings>
<!--Optional:-->
<tem:login>name.surname</tem:login>
<!--Optional:-->
<tem:password>rightPawssword</tem:password>
<!--Optional:-->
<tem:ipAddress>144.44.55.4</tem:ipAddress>
<!--Optional:-->
<tem:clientVersion>1</tem:clientVersion>
<!--Optional:-->
<tem:lastUpdateTime>2</tem:lastUpdateTime>
</tem:getConfigSettings>
</soapenv:Body>
</soapenv:Envelope>
这是网络服务响应,以防夫妻用户名和密码正确且用户可以登录系统:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<getConfigSettingsResponse xmlns="http://tempuri.org/">
<getConfigSettingsResult>
<![CDATA[
<root>
<status>
<id>0</id>
<message></message>
</status>
<drivers>
<drive id="tokenId 11">
<shared-secret>Shared 11</shared-secret>
<encoding>false</encoding>
<compression />
</drive>
<drive id="tokenId 2 ">
<shared-secret>Shared 2 </shared-secret>
<encoding>false</encoding>
<compression>false</compression>
</drive>
</drivers>
</root>
]]>
</getConfigSettingsResult>
</getConfigSettingsResponse>
</s:Body>
</s:Envelope>
在此回复中,重要的部分是:
<status>
<id>0</id>
<message></message>
</status>
因为<id>0</id>
表示用户可以登录系统
相反,如果情侣用户名且密码 不正确,我将获得以下响应:< / p>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<getConfigSettingsResponse xmlns="http://tempuri.org/">
<getConfigSettingsResult><![CDATA[<root>
<status>
<id>-1</id>
<message>Login or password incorrect</message>
</status>
</root>]]></getConfigSettingsResult>
</getConfigSettingsResponse>
</s:Body>
</s:Envelope>
正如您在本案例中所见,我有<id>-1</id>
(表示出现错误的情况),并在消息标记中指定了发生错误的类型。
好的,现在我必须创建一个调用此 getConfigSettings()方法的Java方法,向其传递所请求的5个参数:登录,密码, ipAddress , clientVersion 和 lastUpdateTime (如果在此阶段唯一重要的参数是登录和< strong>密码,其他可以是......)
现在我不知道它是怎么做的。
在我的项目中,还有另一种方法可以调用同一Web服务的另一个请求报告:
public String getVersion() {
java.net.URL url = null;
java.net.URLConnection conn = null;
java.io.BufferedReader rd = null;
String soapResponse = "";
String risultato = "";
// SOAP ENVELOP for the request:
String soapRequest;
soapRequest = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\">" + "<soapenv:Header/>" + "<soapenv:Body> " + "<tem:getVersion/>" + "</soapenv:Body>" + "</soapenv:Envelope>";
try {
// Try to open a connection
url = new java.net.URL(_webServiceUrl);
conn = url.openConnection();
// Set the necessary header fields
conn.setRequestProperty("SOAPAction", "http://tempuri.org/IMyService/getVersion");
conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
conn.setDoOutput(true);
// Send the request:
java.io.OutputStreamWriter wr = new java.io.OutputStreamWriter(conn.getOutputStream());
wr.write(soapRequest);
wr.flush();
// Read the response
rd = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream()));
// Put the entire response into the soapResponse variable:
String line;
while ((line = rd.readLine()) != null) {
//System.out.println(line);
soapResponse = soapResponse + line + System.getProperty("line.separator");
}
rd.close();
// PERFORM SOME ELABORATION ON THE RESPONSE
..........................................
..........................................
..........................................
..........................................
return risultato;
}
看着这种工作方法,在我看来,做了类似的事情:
它为我的请求创建一个包含 SOAP Envelop 的String对象。
尝试连接到我的WebService。
然后设置必要的标题字段(这对我来说不清楚,究竟是什么意思?什么是 tempuri ?),究竟是什么以下几行:
conn.setRequestProperty("SOAPAction", "http://tempuri.org/IMyService/getVersion");
conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
conn.setDoOutput(true);
将我准备好的请求发送到WebService
获取回复并将其放入 String soapResponse 变量
这是我想要创建的其他 authentication()方法,我必须使用以前的参数创建 SOAP Envelop ,将其发送到Web服务和获取SOAP响应。
我认为我的主要问题是如何使用参数创建正确的 String soapRequest 对象。