android调用webservice接口应用实例

来源:互联网 发布:知乎暨南大学临床医学 编辑:程序博客网 时间:2024/06/05 02:08

一、Webservice接口(使用EJB)

1、接口

package com.zjm.bean;import javax.ejb.Remote;@Remotepublic 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 {@WebMethodpublic 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;}


0 0
原创粉丝点击