javaweb 服务器 提供SOAP协议接口,android客户端调用代码实现过程
来源:互联网 发布:网络传真机 无座机 编辑:程序博客网 时间:2024/05/23 00:09
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService
public class ServiceHello {
public String getValue(String name){
System.out.println("我叫:"+name);
return"我叫:"+name;
}
/**
* ¥´»Î ˝◊÷Œ“∏¯ƒ„º∆À„£¨π˛π˛π˛
* @return
*/
publicint printChenxinkuiString(int numb1 ,int numb2){
System.out.println("两个数相加为:"+(numb1+numb2));
return numb1+numb2;
}
/**
* @param args
*/
publicstatic void main(String[] args) {
// TODO Auto-generated method stub
Endpoint.publish("http://10.37.68.153:8080/TheService2/",new ServiceHello());
System.out.println("service success!");
}
}
4.写完代码后,右键》Run As 》Java Application 运行一下,如果控制台打印 service success,说明发布成功
5.接下来写可以在浏览器访问http://10.37.68.153:8080/TheService2/ServiceHello?wsdl 。ip是自己电脑的IP
如果发布成功,会看到如下代码
6.哈哈,发布成功了,soap接口就出来了,wsdl文件格式展示出来了,接下来我们写android代码,代码如下
package kandroid.keegan.com.theclient;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import org.ksoap2.SoapEnvelope;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.HttpTransportSE;import org.xmlpull.v1.XmlPullParserException;import java.io.IOException;public class MainActivity extends Activity { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { testWebservice(); printChenxinkuiString(); } }); } public void testWebservice(){ new Thread(new Runnable() { @Override public void run() { try { String nameSpace = "http://service.hyan.com/"; String methodName = "getValue"; String actionName = nameSpace + methodName; //SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第二个参数表示要调用的WebService方法名。 //指定webservice的命名空间和调用的方法名 SoapObject request = new SoapObject(nameSpace,methodName); //设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下 //要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致(我发现必须为“arg0,arg1”),只要设置参数的顺序一致即可。 request.addProperty("arg0","chenxinkui"); //生成调用Webservice方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述 //创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。该版本号需要根据服务端WebService的版本号设置。在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,该属性的值就是在第一步创建的SoapObject对象 SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = false;// envelope.bodyOut = request; envelope.setOutputSoapObject(request);// envelope.bodyOut = request; //创建HttpTransportsSE对象。通过HttpTransportsSE类的构造方法可以指定WebService的WSDL文档的URL HttpTransportSE ht =new HttpTransportSE("http://10.37.68.153:8080/TheService2/ServiceHello"); //使用call方法调用WebService方法 //Call方法的第一个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象 ht.call(actionName,envelope); //使用getResponse方法获得WebService方法的返回结果 if(envelope.getResponse() != null){ /** * 打印服务端返回的结构 */ Log.e("chenxinkui","服务端返回的结果是::"+envelope.getResponse().toString());// SoapObject result = (SoapObject) envelope.bodyIn;// String strResponse = result.getProperty("org0"); }else{ Log.e("chenxinkui","envelope 为空"); }// SoapObject soapObject = ( SoapObject) envelope.getResponse();// Log.e("chenxinkui","soapObject:"+"adsfasdf");// Log.e("chenxinkui","soapObject:"+soapObject.toString());// SoapObject result = (SoapObject) envelope.bodyIn;// detail = (SoapObject) result// .getProperty("getWeatherbyCityNameResult"); } catch (IOException e) { Log.e("~~", "e1:" + e.toString()); Log.e("~~", "getMessage:" + e.getMessage()); e.printStackTrace(); } catch (XmlPullParserException e) { Log.e("~~", "e2:" + e.toString()); e.printStackTrace(); } } }).start(); } //这个是我第二个方法,实现代码基本一模一样,就加了一个参数,看懂上面那个方法就好了 public void printChenxinkuiString(){ new Thread(new Runnable() { @Override public void run() { try { String nameSpace = "http://service.hyan.com/"; String methodName = "printChenxinkuiString"; String actionName = nameSpace + methodName; //SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第二个参数表示要调用的WebService方法名。 //指定webservice的命名空间和调用的方法名 SoapObject request = new SoapObject(nameSpace,methodName); //设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下 //要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致(我发现必须为“arg0,arg1”),只要设置参数的顺序一致即可。 request.addProperty("arg0","3"); request.addProperty("arg1","5"); //生成调用Webservice方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述 //创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。该版本号需要根据服务端WebService的版本号设置。在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,该属性的值就是在第一步创建的SoapObject对象 SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = false;// envelope.bodyOut = request; envelope.setOutputSoapObject(request);// envelope.bodyOut = request; //创建HttpTransportsSE对象。通过HttpTransportsSE类的构造方法可以指定WebService的WSDL文档的URL HttpTransportSE ht =new HttpTransportSE("http://10.37.68.153:8080/TheService2/ServiceHello"); //使用call方法调用WebService方法 //Call方法的第一个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象 ht.call(actionName,envelope); //使用getResponse方法获得WebService方法的返回结果 if(envelope.getResponse() != null){ /** * 打印服务端返回的结构 */ Log.e("chenxinkui","客户端传入的两个数,服务器相加结果为:"+envelope.getResponse().toString());// SoapObject result = (SoapObject) envelope.bodyIn;// String strResponse = result.getProperty("org0"); }else{ Log.e("chenxinkui","envelope 为空"); }// SoapObject soapObject = ( SoapObject) envelope.getResponse();// Log.e("chenxinkui","soapObject:"+"adsfasdf");// Log.e("chenxinkui","soapObject:"+soapObject.toString()); // SoapObject result = (SoapObject) envelope.bodyIn; // detail = (SoapObject) result// .getProperty("getWeatherbyCityNameResult"); } catch (IOException e) { Log.e("~~", "e1:" + e.toString()); Log.e("~~", "getMessage:" + e.getMessage()); e.printStackTrace(); } catch (XmlPullParserException e) { Log.e("~~", "e2:" + e.toString()); e.printStackTrace(); } } }).start(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}
结束,跑一下,客户端就可以输出服务器返回的参数了,哈哈,是不是很哈皮
写这文章就算给自己做了个小总结,希望能帮到大家,谢谢!!!
- javaweb 服务器 提供SOAP协议接口,android客户端调用代码实现过程
- soap客户端调用服务端代码
- iOS调用SOAP协议的WebServices接口
- 基于Soap协议的android客户端和服务器的数据交互(学习天气预报例子的心得)
- 基于Soap协议的android客户端和服务器的数据交互
- Android 请求WebService接口(SOAP协议)
- 基于soap协议和webservice的客户端与服务器通信
- PHP5下SOAP调用实现过程
- PHP5下SOAP调用实现过程
- android调用服务器接口
- ios 进阶 -- 调用webservice接口(soap协议)的方法
- API:定义客户端/服务器接口协议
- PHP5 Soap调用(客户端)
- SOAP客户端调用Webservice_hanCSDN_20130225
- 客户端调用SOAP服务
- Android客户端+JavaWeb服务器远程登入
- android之使用Soap协议调用webservice实现手机归属地查询
- daytimeUDP协议客户端与服务器交互过程
- swing 之FlowLayout 实现自动换行和滚动条添加
- Oracle的rollup、cube、grouping sets函数
- 浅析JVM及其调优(一)
- 快捷键收集
- ubuntn 12.04源
- javaweb 服务器 提供SOAP协议接口,android客户端调用代码实现过程
- 关于CodeFile和CodeBehind
- linux下格式化SD卡
- Xcode插件管理工具Alcatraz
- 从excel导入sku,然后修改产品的状态Status
- Angularjs1.x 项目结构
- 2016,请不要在公司混日子!
- MFC基础类及其层次结构
- Linux上常用软件安装和总结