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