您的位置:首页 > 移动开发 > Android开发

CXF webservice android 实现本地传输数据

2012-03-31 18:16 477 查看
服务器端: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”(访问公网需要)。我就是在这里花费了很长时间调试,希望路过的朋友们不要走弯路!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: