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”(访问公网需要)。我就是在这里花费了很长时间调试,希望路过的朋友们不要走弯路!
先写接口:
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”(访问公网需要)。我就是在这里花费了很长时间调试,希望路过的朋友们不要走弯路!
相关文章推荐
- android端实现WebService数据传输
- WebService CXF框架的使用(实现JSON与XML数据传输)
- castor + xml schema 实现webservice中复杂结构数据传输
- Android 蓝牙技术 实现终端间数据传输
- webService实现数据传输
- Delphi实现WebService带身份认证的数据传输
- Android基于WIFI实现电脑和手机间数据传输的技术方案研究
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- Android基于WIFI实现电脑和手机间数据传输的技术方案研究
- android Activity和Fragment之间的数据传输的实现
- 基于axis2的webservice和android简单的本地数据交互(下
- android----发送soap数据给服务器调用webservice,实现手机归属地查询
- castor + xml schema 实现webservice中复杂结构数据传输
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- java做服务器,android做客户端,实现数据传输
- android webservice 本地服务器的搭建 简单的运算法则的实现(五)
- Android 蓝牙技术 实现终端间数据传输
- castor + xml schema 实现webservice中复杂结构数据传输
- Android发送SOAP数据给服务器调用webservice,实现手机号归属地查询
- Android通过ksoap2传递复杂数据类型及CXF发布的webservice详细介绍