不想新建项目了(可以参考前面一、二、三),就在现有的项目上说明吧,希望看得懂。
先配好服务器端。
1. 搭好Maven项目后,引入需要的包。pom.xml中增加:
<!-- CXF WebService --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf</artifactId> <version>2.4.6</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>wsdl4j</groupId> <artifactId>wsdl4j</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>org.apache.neethi</groupId> <artifactId>neethi</artifactId> <version>3.0.1</version> <exclusions> <exclusion> <groupId>wsdl4j</groupId> <artifactId>wsdl4j</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.ws.xmlschema</groupId> <artifactId>xmlschema-core</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-xjc</artifactId> <version>2.2.6</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.2.6</version> </dependency>
2.web.xml中增加:
<!-- Apache CXFServlet --> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/webService/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.do</welcome-file> </welcome-file-list>
<context-param> <param-name>contextConfigLocation</param-name> <param-value> <!-- cxf webservice Bean --> /WEB-INF/webServiceBean.xml </param-value> </context-param>
3.webServiceBean.xml声明:
<?xml version="1.0" encoding="UTF-8"?> <!-- START SNIPPET: beans --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <!-- Import Apache CXF Bean Definition --> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <!-- implementor :接口类的实现类 address: 要和注释里面神秘的服务名对应, --> <jaxws:endpoint id="synergyWebService" implementor="cn.iscas.ac.gz.synergy.system.webService.SynergyWebServiceImpl" address="/SynergyWebService" /> </beans>
4.SynergyWebService 接口定义:
package cn.iscas.ac.gz.synergy.system.application.webService; import javax.jws.WebParam; import javax.jws.WebService; /** * @Description webService接口 * * */ @WebService public interface SynergyWebService { /** * * @Description 根据用户账号获取该用户信息 * * @param account 用户账号 * @return * */ public String getUser(@WebParam(name = "account") String account); }
5.SynergyWebServiceImpl 接口实现:
package cn.iscas.ac.gz.synergy.system.webService; import java.util.ArrayList; import java.util.List; import javax.jws.WebService; import org.springframework.beans.factory.annotation.Autowired; import cn.iscas.ac.gz.synergy.system.application.webService.SynergyWebService; import cn.iscas.ac.gz.synergy.system.domain.repository.UserRepository; /** * @Description webService接口实现 注意:@webservice自动注入一定要写 * *注意这里的targetNamespace 一定是其实现接口的路径 */ @WebService(endpointInterface = "cn.iscas.ac.gz.synergy.system.application.webService.SynergyWebService", serviceName = "SynergyWebService",targetNamespace="http://webService.application.system.synergy.gz.ac.iscas.cn/") public class SynergyWebServiceImpl implements SynergyWebService { /* * 用户管理 */ @Autowired private UserRepository userInfoRepo; @Override public String getUser(String account) { //逻辑自己写 User user = userInfoRepo.getUserInfoByUserName(account); List<User> users = new ArrayList<User>(); users.add(user); String result = this.buildJSONForUsers(users); return result; } }
OK,如果没什么问题,服务端算是搭建OK了,访问下地址是否有XML文档:
http://127.0.0.1:8080/项目名/webService/SynergyWebService?wsdl
OK,接下来写客户端,动态调用:
package com.test; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; /** * @Description * * @author yeyuelong Email:yeyuelong@gz.iscas.ac.cn * @version 1.0 创建时间 2013-2-26 * */ public class CXFClient { public static void main(String[] args) { try { JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); org.apache.cxf.endpoint.Client client = dcf.createClient("http://127.0.0.1:8080/Synergy/webService/SynergyWebService?wsdl"); Object[] objects = client.invoke("getUser","admin@gziscas"); // 输出调用结果 System.out.println(objects[0].toString()); } catch (Exception e) { e.printStackTrace(); } } }
运行下,看是否可以获取到数据:
相关参考:
http://wenku.baidu.com/view/1343f96a1eb91a37f1115c0d.html
http://lost-alien.iteye.com/blog/1175859
相关推荐
在本篇博文中,我们将深入探讨如何利用Apache CXF实现Web Service进行本地数据交互,特别是在PC端和Android端之间的通信。Apache CXF是一个开源框架,它允许开发人员创建和消费各种Web服务,包括SOAP和RESTful风格的...
本文将深入探讨基于Apache CXF实现的Web Service在本地数据交互中的应用,尤其是如何在PC端与Android端之间进行通信。Apache CXF是一个开源框架,专门用于构建和消费Web服务,支持多种协议和标准,如SOAP、RESTful等...
在本篇博文中,我们将深入探讨如何利用Apache CXF库创建一个基于Web Service的数据交互解决方案,特别是关注于PC端和Android端之间的本地通信。Apache CXF是一个开源框架,它允许开发者构建和部署SOAP(简单对象访问...
在PC上,我们通常会使用如XFire、Axis2或CXF等库来访问WebService,但在资源有限的Android设备上,我们需要寻找更适合的解决方案。 KSOAP2是一个适用于Android的轻量级库,专门用于处理SOAP通信。在开始使用KSOAP2...
Java访问WebService返回XML数据的方法是Java开发者在与Web服务交互时常见的需求,特别是当Web服务以XML格式提供数据时。本篇文章将详细讲解如何通过Java实现这一过程,并介绍相关的技术点。 首先,为了访问...
- 在实验过程中可能需要记录服务端和客户端交互时的数据,包括但不限于请求参数、响应内容等。 - 对于涉及到性能或错误处理的部分,还需进行相应的数据分析。 #### 实验结果与结论 - 实验成功地实现了基于SOAP的Web...