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

2023-10-19 07:40

本文主要是介绍安卓开发 调用 jax-ws 格式的webservices,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

 通过 安卓调用 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 效果


  



这篇关于安卓开发 调用 jax-ws 格式的webservices的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/238357

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python如何调用另一个类的方法和属性

《Python如何调用另一个类的方法和属性》在Python面向对象编程中,类与类之间的交互是非常常见的场景,本文将详细介绍在Python中一个类如何调用另一个类的方法和属性,大家可以根据需要进行选择... 目录一、前言二、基本调用方式通过实例化调用通过类继承调用三、高级调用方式通过组合方式调用通过类方法/静

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块