微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CXF webservice android 实现本地传输数据

@H_404_2@

服务器端:CXF 开发 webservice,实现输入用户id,返回用户信息:主要是webservice标签的使用。

先写接口:

package com.webservice.users;

import javax.jws.*;
import com.ready.dto.*;
//注意这里不是serviceName,而是name,在wsdl文件显示为:xxx.wsdl
//targetNamespace对应wsdl中的namespace
@WebService(name = "userService",targetNamespace = UserInfo.NS)
public interface UserInfo {
 public static final String NS = "
http://localhost:8080/WebServicePractice1";
 //这里的name体现在返回的xml文件
 @WebResult(name = "getUsersInfo")
 public GetUserDto getUser(
   @WebParam(name = "userId") int userId);
 }

 

实现类:

package com.webservice.users;

import com.ready.dto.*;
import com.ready.users.*;
import javax.jws.WebService;

//实现的接口名称
@WebService(endpointInterface="com.webservice.users.UserInfo")
public class UserInfoImpl implements UserInfo {
 
  UserBeanCl ubc = new UserBeanCl();
     public GetUserDto getUser(int userId) {
  return ubc.getUserInfoById(userId);
 }}

 

UserBean类

package com.ready.users;

import javax.xml.bind.annotation.XmlAccesstype;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

//propOrder指定java中的各个属性在xml中显示的位置
@XmlType(name="User",propOrder={"userId","userName","userAge","userSex"})
@XmlAccessorType(XmlAccesstype.FIELD)
public class UserBean {
 private int userId;
 private String userName;
 private int userAge;
 private String userSex;

 public int getUserId() {
  return userId;
 }
 public void setUserId(int userId) {
  this.userId = userId;
 }
 public String getUserName() {
  return userName;
 }
 public void setUserName(String string) {
  this.userName = string;
 }
 public int getUserAge() {
  return userAge;
 }
 public void setUserAge(int i) {
  this.userAge = i;
 }
 public String getUserSex() {
  return userSex;
 }
 public void setUserSex(String userSex) {
  this.userSex = userSex;
 }

}

 

GetWordDto类

package com.ready.dto;

import java.util.ArrayList;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlType;
import com.webservice.users.UserInfo;
import com.ready.users.*;

//将类映射为xml模型
@XmlType(name = "",namespace = UserInfo.NS)
public class GetUserDto {
 
 private ArrayList<UserBean> userList;
 private int length;
 //这两行不加,程序也能正常运行,这两句的作用相当于给元素穿个外套
 //给user加一层包裹,而且必须加在get、set方法
 @XmlElementWrapper(name = "users")
 @XmlElements(@XmlElement(name = "user",type = UserBean.class))
 public ArrayList<UserBean> getUserList() {
  return userList;
 }
 public void setUserList(ArrayList<UserBean> userList) {
  this.userList = userList;
 }
 public int getLength() {
  return length;
 }
 public void setLength(int length) {
  this.length = length;
 }

}

以上是web工程的主要类(没有写全)

配置文件,网上很多,这里不再赘述。

主要讲一下android客户端的WebService类:用到第三方软件:Ksoap2.

package com.webservice;

import java.lang.String;
import java.util.*;
import org.ksoap2.soapEnvelope;
import org.ksoap2.serialization.soapObject;
import org.ksoap2.serialization.soapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import org.ksoap2.transport.HttpTransportSE;
import com.datatype.*;

public class Webservice{
 private static final String NAMESPACE = "http://192.168.6.245:8080/WebServicePractice1";
 private static String URL = "http://192.168.6.245:8080/WebServicePractice1/Info";
 private static final String getmethod_NAME = "getUser";
 private static String SOAP_GETACTION = "http://192.168.6.245:8080/WebServicePractice1/Info/getUser";
 private static ArrayList<UserBean> usersList;
    public static ArrayList<UserBean> getUsers() {
  try {
   SoapObject rpc = new SoapObject(NAMESPACE,getmethod_NAME);
   rpc.addProperty("userId",1);
   SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
   envelope.bodyOut = rpc;
   envelope.setoutputSoapObject(rpc);
   
   HttpTransportSE ht = new HttpTransportSE(URL);
   ht.debug = true;//允许调试
   ht.call(SOAP_GETACTION,envelope);
   System.out.println("call==");
   SoapObject detail = (SoapObject)envelope.getResponse();
   SoapObject result = (SoapObject)detail.getProperty("users");
   
   int userNumber = result.getPropertyCount();
   System.out.println("用户的个数为:"+userNumber);
   usersList = new ArrayList<UserBean>();
   for (int i = 0; i < userNumber; i++)
   {
    SoapObject tempObject = null;
    UserBean ub = new UserBean();
    tempObject = (SoapObject)result.getProperty(i);
    ub.setUserId(Integer.parseInt(tempObject.getProperty("userId").toString()));
    ub.setUserName(tempObject.getProperty("userName").toString());
    ub.setUserAge(Integer.parseInt(tempObject.getProperty("userAge").toString()));
    System.out.println("年龄为:"+ub.getUserAge());
    ub.setUserSex(tempObject.getProperty("userSex").toString());
    System.out.println("性别为:"+ub.getUserSex());
    usersList.add(ub);
   }      
           
  } catch (Exception e) {
   System.out.println("意外发生!");
   e.printstacktrace();
  }
  return usersList;
 }

 
}

 

用android访问本地服务,网址不能为:http://localhost:8080/xxx,而应该是你的IP地址,或者是:http://10.0.2.2。而且wsdl地址http://192.168.6.245:8080/WebServicePractice1/Info,这里不能有“?wsdl”(访问公网需要)。我就是在这里花费了很长时间调试,希望路过的朋友们不要走弯路!

@H_404_2@
@H_404_2@
@H_404_2@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐