加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

CXF webservice android 实现本地传输数据

发布时间:2020-12-17 01:01:42 所属栏目:安全 来源:网络整理
导读:服务器端:CXF 开发 webservice,实现输入用户id,返回用户信息:主要是webservice标签的使用。 先写接口: package com.webservice.users; import javax.jws.*; import com.ready.dto.*; //注意这里不是serviceName,而是name,在wsdl文件中显示为:xxx.wsdl

服务器端: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”(访问公网需要)。我就是在这里花费了很长时间调试,希望路过的朋友们不要走弯路!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读