CXF 发布 Java webservice
来源:互联网 发布:西华大学点击网络 编辑:程序博客网 时间:2024/06/04 18:09
1 服务端
服务端使用了 JAX-WS API 开发,并使用 CXF 发布,同时使用 Spring context 管理 bean 。由于发布到 Tomcat 服务器,所以要 “cxf-rt-transports-http”。
导包
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cheery</groupId> <artifactId>recruitment</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>recruitment</name> <description>recruitment</description> <dependencies> <!-- jaxws-api --> <dependency> <groupId>javax.xml.ws</groupId> <artifactId>jaxws-api</artifactId> <version>2.3.0</version> <scope>provided</scope> </dependency> <!-- cxf-rt-frontend-jaxws --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.2.1</version> </dependency> <!-- cxf-rt-transports-http --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.2.1</version> </dependency> <!-- spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.2.RELEASE</version> </dependency> </dependencies></project>
定义 SEI
接口类,可要可不要
package com.cheery.recruitment.ws;import javax.jws.WebService;@WebServicepublic interface HelloWorld { String sayHi(String text);}
实现类,它才是真正的 Service Endpoint
package com.cheery.recruitment.ws;import javax.jws.WebService;@WebService(endpointInterface = "com.cheery.recruitment.ws.HelloWorld")public class HelloWorldImpl implements HelloWorld { public String sayHi(String text) { System.out.println("sayHi called"); return "Hello " + text; }}
使用 spring 管理服务bean
在 webapp 目录下创建文件:WEB-INF/beans.xml
<?xml version="1.0" encoding="UTF-8"?><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"> <jaxws:endpoint id="helloWorld" implementor="com.cheery.recruitment.ws.HelloWorldImpl" address="/HelloWorld" /></beans>
web.xml
定义 CXFServlet ,当然也要初始化 web 应用上下文
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>recruitment</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/beans.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping></web-app>
部署Tomcat 并测试
浏览器地址:http://localhost:8080/recruitment/HelloWorld?wsdl
可以看到该服务资源的 wsdl 则表示发布成功。
2 使用 CXF 下载代码
C:\Users\z15075>d:D:\>cd D:\apache-cxf-3.1.12\binD:\apache-cxf-3.1.12\bin>wsdl2java -encoding utf-8 -p com.cheery.recruitment.ws -d D:\work\ http://localhost:8080/recruitment/HelloWorld?wsdl
3 客户端
将步骤2 的代码复制到 src 下
略
也用 spring 管理客户端bean吧
<?xml version="1.0" encoding="UTF-8"?><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"> <jaxws:client id="helloWorldClient" serviceClass="com.cheery.recruitment.ws.HelloWorld" address="http://localhost:8080/recruitment/HelloWorld" /></beans>
像使用本地方法一样调用 webservice
package com.cheery.recruitment;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.cheery.recruitment.ws.HelloWorld;public class Client { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"classpath:META-INF/beans.xml"}); HelloWorld helloWorldClient=(HelloWorld) context.getBean("helloWorldClient"); String msg_retrun=helloWorldClient.sayHi("Java web service"); System.out.println(msg_retrun); }}
4 总结
核心,JAX-WS API ,CXF frontend
阅读全文