一、Webservice接口(使用EJB)
1、接口
package com.zjm.bean;
import javax.ejb.Remote;
@Remote
public interface PhoneRemot {
public String Hello(String username);
}
2、bean
package com.zjm.bean;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@Stateless(mappedName="phoneService")
@WebService(serviceName="PhoneService",name="PhoneServer")
public class PhoneService implements PhoneRemot {
@WebMethod
public String Hello(@WebParam(name = "username") String username) {
return "Hello"+ username;
}
}
二、wsdl接口文件
<?xml version="1.0" encoding="UTF-8" ?>
- <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Oracle JAX-WS 2.1.3-07/10/2008 08:41 PM(bt). -->
- <!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Oracle JAX-WS 2.1.3-07/10/2008 08:41 PM(bt). -->
- <definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://bean.zjm.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://bean.zjm.com/" name="PhoneService">
- <types>
- <xsd:schema>
<xsd:import namespace="http://bean.zjm.com/" schemaLocation="http://127.0.0.1:7001/PhoneService/PhoneService?xsd=1" />
</xsd:schema>
</types>
- <message name="Hello">
<part name="parameters" element="tns:Hello" />
</message>
- <message name="HelloResponse">
<part name="parameters" element="tns:HelloResponse" />
</message>
- <portType name="PhoneServer">
- <operation name="Hello">
<input message="tns:Hello" />
<output message="tns:HelloResponse" />
</operation>
</portType>
- <binding name="PhoneServerPortBinding" type="tns:PhoneServer">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
- <operation name="Hello">
<soap:operation soapAction="" />
- <input>
<soap:body use="literal" />
</input>
- <output>
<soap:body use="literal" />
</output>
</operation>
</binding>
- <service name="PhoneService">
- <port name="PhoneServerPort" binding="tns:PhoneServerPortBinding">
<soap:address location="http://127.0.0.1:7001/PhoneService/PhoneService" />
</port>
</service>
</definitions>
三、Android客户端
1、加入ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar
注意要放在libs文件夹中
2、AndroidManifest.xml配置文件
<uses-permissionandroid:name="android.permission.INTERNET" /> 增加网络访问权限3、代码
public void onClick(View view) {
EditText username = (EditText) findViewById(R.id.edtusername);
TextView txtResult= (TextView) findViewById(R.id.txtResult);
Object result = null;
String url = "http://10.88.99.12:7001/PhoneService/PhoneService?wsdl";
String nameSpace = "http://bean.zjm.com/";
String method = "Hello";
Map<String, Object> params = new HashMap<String, Object>();
params.put("username", username.getText().toString().trim());
result = getResult(nameSpace, method, url, params);
txtResult.setText(result.toString());
}
/**
* 调取WebService接口得到结果
* @param namespace WebService的命名空间
* @param method WebService所发布的方法
* @param url 服务器发布的 url
* @param params 参数
* @return
*/
public static Object getResult(String nameSpace, String method,
String url, Map<String, Object> params) {
String SOAP_ACTION = nameSpace + method;
// 实例化SoapObject对象,并指定命名空间和方法名
SoapObject request = new SoapObject(nameSpace, method);
// 设置调用参数方法,包括参数名称和参数值
Set keySet = params.keySet();
// 返回键的
Iterator it = keySet.iterator();
while (it.hasNext()) { // 第一种迭代体式格式取键值
Object key = it.next();
request.addProperty(key.toString(), params.get(key));
}
// 设置SOAP请求信息(参数部分为SOAP协议版本号,与你要调用到的WEBSERVICE中的版本号一致)
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = request;
//webservic接口是否为.net注意若设错,接口会得不到参数
envelope.dotNet = false;
envelope.setOutputSoapObject(request);
HttpTransportSE ht = new HttpTransportSE(url);
try {
// 调用webservice(其中参数一SOAP_ACTION为命名空间+方法名,参数二为envelope)
ht.call(SOAP_ACTION, envelope);
} catch (IOException e) {
Log.e("IOException:", e.getMessage());
// androidHT.reset();
} catch (XmlPullParserException e1) {
Log.e("XmlPullParserException", e1.getMessage());
} catch (IllegalStateException e2) {
Log.e("IllegalStateException", e2.getMessage());
}
try {
// 使用getResponse方法获得WebService方法的返回结果
return (Object)envelope.getResponse();
} catch (SoapFault e) {
e.printStackTrace();
}
return null;
}