安卓开发 调用 jax-ws 格式的webservices

原创 2013年12月04日 15:23:15

 

 通过 安卓调用 java 和 .net开发的webservices


1   JAVA版 服务器端  使用myeclipse 10+jax-ws API 很容易做一个服务端


1 新建一个 webservices project 工程   (导入  myeclipse library  jax-ws 2.1 包  和 GSON2.4包, 这里用gson返回字符串

 2  建立一个 bean 主要用来存储数据, 不用也可以 

  只有2个字段  private string name ; private int age; 配置 get set

3  建立一个 对外服务类, 写几个函数

package zms.zte.wbs;

import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;

import zms.zte.wbs.bean.userinfo;

public class SayHello {
 
/* public static void main(String[] args) {
  
  SayHello sayHello=new SayHello();

   System.out.println(sayHello.getusers());
 }*/
 
 
  public String   getuser(String name,int age)
  {
  
   userinfo u=new userinfo(name, age);
   Gson sGson=new Gson();
  
   return sGson.toJson(u);
  }
 
  public  String   getusers()
  {
   List<userinfo> ls=new ArrayList<userinfo>();
   for (int i=0; i<10; i++)
   {
    userinfo userinfo=new userinfo("name"+i, i);
    ls.add(userinfo);
   }
  
   Gson sGson=new Gson();
   
   return sGson.toJson(ls);
  
  }
 
 
}

  

4 然后 把这个类作为webservice发布

    new--webserices--选择 从 bean 生成 , 不是从wsdl生成

5  访问 http://localhost:8080/wbs/sayhelloport?wsdl




6  先用 java 写个测试类


  新建一个java工程, 然后新建webservices client 找到  http://localhost:8080/wbs/SayHelloPort?wsdl

会自动生成代码

   

 

 

7  测试成功后 开始用安卓 访问了


8  代码部分

package com.example.androidwbs;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
 
 //java webserice , 参考assets/sayhelloport.wsdl
 public static final String NAME_SPACE = "http://wbs.zte.zms/";
    public static String URL = "http://192.168.1.103:8080/wbs/SayHelloPort";
    public static String  Method2="getuser";
    public  final String Action2=NAME_SPACE+Method2; 
   
    //.net webservice
   
   
   
   
    //定义控件
    private TextView tx;
    private Button btn;
   
   
    private TextView tx2;
    private TextView tx3;
    private Button btn2;
    private EditText editText;
   
   
    private String telString;
   
    private Handler handler1 = new Handler() {

  @Override
  public void handleMessage(Message msg) {
   
   if(msg.what==1)
   {
    tx.setText(String.valueOf(msg.obj));
   }
   else if (msg.what==2) {
    tx3.setText(String.valueOf(msg.obj));
   }
   
  }
     
    };
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  tx=(TextView)findViewById(R.id.textView1);
  tx2=(TextView)findViewById(R.id.textView2);
  tx3=(TextView)findViewById(R.id.textView3);
  editText=(EditText)findViewById(R.id.editText1);
  
  btn=(Button)findViewById(R.id.button1);
 
  btn.setOnClickListener(new OnClickListener() {
   
   @Override
   public void onClick(View v) {
    
    Threads t1=new Threads();
    t1.start();
   }
  });
  
  btn2=(Button)findViewById(R.id.button2);
  
  btn2.setOnClickListener(new OnClickListener() {
   
   @Override
   public void onClick(View v) {
    
     // 手机号码(段) 
                String phoneSec = editText.getText().toString().trim(); 
              // 简单判断用户输入的手机号码(段)是否合法 
                  if ("".equals(phoneSec) || phoneSec.length() < 7) { 
                    // 给出错误提示 
               editText.setError("您输入的手机号码(段)有误!"); 
                     editText.requestFocus(); 
                 // 将显示查询结果的TextView清空 
                   tx2.setText(""); 
                      return; 
               }  else {
                
                  telString=editText.getText().toString().trim();
         Threads2 threads2=new Threads2();
         threads2.start();
      }

   }
  });
  
 }
 
 class Threads extends Thread{

  @Override
  public void run() {
    //tomcat 7.055 for 64  jdk 1.6 for 64  web3.0 这里写 ver11 ,如果是ver12会报 http 415错误
   SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
          SoapObject request = new SoapObject(NAME_SPACE,Method2);
          //传递参数必须是arg开头,这里搞死我了 搞了我一上午,网上说,按顺序即可,毛哦, 实践是检验真理的唯一标准!
         request.addProperty("arg0",  "张木生" );
            request.addProperty("arg1",  443 );
          //写真实的变量名也没有用,必须是 arg0 ,arg1 一直拍下去,好像只支持10个参数.
         /* request.addProperty("name",  "网名" );
          request.addProperty("age",  "16" );*/
             envelope.setOutputSoapObject(request);
              envelope.bodyOut = request;
             envelope.dotNet = false;
             HttpTransportSE ht = new HttpTransportSE(URL);
       
       try{
        
        ht.call(Action2,envelope);
           //貌似   ht.call(null,envelope); 也可以
       
       if(envelope.getResponse()!=null){
        
        Log.v("zms", "返回的信息:"+envelope.getResponse().toString());
         Message msg = handler1.obtainMessage();
         msg.what=1;
      msg.obj =envelope.getResponse().toString();
         handler1.sendMessage(msg);
       }
       else
           Log.v("zms", "没取到");
      } catch(Exception e){
          Log.v("zms",e.toString());
        e.printStackTrace();
      
      }
  }
   
 }
 
 class Threads2 extends Thread{

  @Override
  public void run() {
    Log.v("zms","第2个线程启动");
    //命名空间
    String nameSpace="http://WebXml.com.cn/";
    //方法
    String methodName="getMobileCodeInfo";
     // EndPoint 
          String endPoint = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx"; 
       // SOAP Action 
          String soapAction = "http://WebXml.com.cn/getMobileCodeInfo";
       // 指定WebService的命名空间和调用的方法名 
               SoapObject rpc = new SoapObject(nameSpace, methodName); 
        
                // 设置需调用WebService接口需要传入的两个参数mobileCode、userId 
                rpc.addProperty("mobileCode", telString); 
               rpc.addProperty("userId", ""); 
       
                // 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本 
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); 
       
            envelope.bodyOut = rpc; 
              // 等价于envelope.bodyOut = rpc; 
          //    envelope.setOutputSoapObject(rpc); 
               // 设置是否调用的是dotNet开发的WebService 
                envelope.dotNet = true; 
                HttpTransportSE transport = new HttpTransportSE(endPoint); 
               try { 
                    // 调用WebService 
                   transport.call(soapAction, envelope); 
                  
         /*          // 获取返回的数据 
                SoapObject object = (SoapObject) envelope.bodyIn; 
               // 获取返回的结果 
             String result = object.getProperty(0).toString(); 
          
             Log.v("zms",result);*/
            
                   if(envelope.getResponse()!=null){
                   
                    Log.v("zms", "返回的信息:"+envelope.getResponse().toString());
                     Message msg = handler1.obtainMessage();
                     msg.what=2;
                  msg.obj =envelope.getResponse().toString();
                     handler1.sendMessage(msg);
                   }
                   else
                   {
                       Log.v("zms", "没取到");
                   Message msg = handler1.obtainMessage();
                     msg.what=2;
                  msg.obj ="没有查询到";
                     handler1.sendMessage(msg);
                     
                      
                   }
              
                 } catch (Exception e) { 
                    e.printStackTrace(); 
                } 
         
          
           
           
           
                

  }
 }
}
 
 

9 效果


  



android 介绍Retrofit的简单使用

Retrofit与okhttp共同出自于Square公司,retrofit就是对okhttp做了一层封装。把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请...

Retrofit用法详解

Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp...

MyEclipse开发JAX-RS架构WebServices收发JSON数据格式

写在最前面:最近因项目需求,开始学习WebServices。虽是快餐式学习,但也一路波折,故写下这篇博文已供后来者借鉴,快速入门。下面进入正题。   开发环境: MyEclipse2013 客户端发送...
  • NaNi_Z
  • NaNi_Z
  • 2013年10月24日 15:24
  • 3686

webservices系列(一)——基础知识和JAX-WS入门demo

简介 Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。 Web Service的关键技术和规则: 1.XML...
  • luo4105
  • luo4105
  • 2017年04月09日 22:04
  • 888

webservices系列(二)——JAX-WS文件上传下载

新建ImgData类,存放文件javabean DataHandler:使用这个类型存放文件 @XmlRootElement(name="ImaData") @XmlAccessorType(XmlA...
  • luo4105
  • luo4105
  • 2017年04月09日 22:41
  • 911

用MyEclipse10开发基于JAX-WS的Web Service实例,接口查询oracle数据库,SpringMVC controller调用接口,附带源码

1、MyEclipse新建一个Web Service项目。 2、输入项目名称,点击Finish完成。 3、创建一个类。package service; public class Getdata {...

jax-ws和spring的整合开发

  • 2017年12月03日 16:42
  • 45KB
  • 下载

MyEclipse6.5基于JAX-WS开发Webservice

  • 2014年08月05日 16:33
  • 284KB
  • 下载

Webservice学习--JAX-WS发布Webservice和调用出现的问题

最近学习JAX-WS,发现一些有趣的事情
  • Nuc_sun
  • Nuc_sun
  • 2014年05月08日 16:24
  • 6029
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:安卓开发 调用 jax-ws 格式的webservices
举报原因:
原因补充:

(最多只允许输入30个字)