安卓开发 调用 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

相关文章

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调