WebService(3):JAX-WS
来源:互联网 发布:java 判断紧急号码 编辑:程序博客网 时间:2024/05/12 17:33
一.概述
JAX-WS2.0 的全称为 Java API for XML-Based Webservices (JAX-WS) 2.0。JAX-WS 2.0 是对 JAX-RPC 1.0 规范的扩展,是 JAX-RPC 1.1 的后续版本, JAX-RPC 2.0 标准发布不久后便被重新命名为 JAX-WS 2.0。 JAX-WS 2.0 是面向 Java 5 的开发 Web services 的最新编程标准,它提供了新的编程模型和对以往的 JAX-RPC 方式的 Web services 进行了增强。 JAX-WS2.0 (JSR 224)是Sun新的web services协议栈,是一个完全基于标准的实现。在binding层,使用的是the Java Architecture for XMLBinding (JAXB, JSR 222),在parsing层,使用的是the Streaming API for XML (StAX, JSR 173),同时它还完全支持schema规范。
特性:
支持SOAP 1.1(默认)
支持XML/HTTP Binding
支持WS-Addressing
支持document/literal样式
支持WS-I Basic Profile
支持消息传输优化机制(Message Transmission Optimization Mechanism,MTOM)
二.java project
1.服务端
HelloWorld.java
package com.now.services;import javax.jws.WebParam;import javax.jws.WebService;@WebService public interface HelloWorld { public String sayHi(@WebParam(name="who") String who); public String sayHello(@WebParam(name="who") String who); }
HelloWorldImpl.java
package com.now.services;import javax.jws.WebMethod;import javax.jws.WebService;@WebServicepublic class HelloWorldImpl implements HelloWorld { @Override public String sayHi(String who) { return"Hi, " + who; } @Override @WebMethod(exclude=true) public String sayHello(String who) { return"Hello, " + who; } }
Server.java
public class Server { public static void main(String args[]) { Endpoint.publish("http://localhost:8080/com/now/services/HelloWorld", new HelloWorldImpl()); } }
浏览器访问地址: http://localhost:8080/com/now/services/HelloWorld?wsdl
2.客户端
(1)wsimport工具生成客户端代码
wsimport也是在JDK的bin目录下的一个exe文件(Windows版),主要功能是根据服务端发布的wsdl文件生成客户端存根及框架,负责 与Web Service 服务器通信,并在将其封装成实例,客户端可以直接使用,就像使用本地实例一样。
对Java而言,wsimport帮助程序员生存调用web service所需要的客户端类文件.java和.class。要提醒指出的是,wsimport可以用于非Java的服务器端,如:服务器端也许是C# 编写的web service,通过wsimport则生成Java的客户端实现。
主要用于Client端(调用端)通过wsdl编译出调用Server端的Java文件
参数含义:
-d:生成客户端执行类的class文件的存放目录
-s:生成客户端执行类的源文件的存放目录
-keep:表示导出webservice的class文件时是否也导出源代码java文件
-p:以package的形式生成文件
-verbose:在控制台显示输出信息
将服务端发布的wsdl生成客户端的类文件:
wsimport -keep -d . -s .\src -p com.now -verbose http://localhost:8080/com/now/services/HelloWorld?wsdl
其中,.
表示当前目录。
(2)客户端调用代码
新建一个包存放调用文件:
InvokeHelloServer.java
package invoke;import com.now.HelloWorldImpl;import com.now.HelloWorldImplService;public class InvokeHelloServer { public static void main(String[] args) { //创建一个用于产生HelloWorldImpl实例的工厂,HelloWorldImplService类是wsimport工具生成的 HelloWorldImplService factory = new HelloWorldImplService(); //通过工厂生成一个HelloWorldImpl实例,HelloWorldImpl是wsimport工具生成的 HelloWorldImpl helloWorldImpl =factory.getHelloWorldImplPort(); String result = helloWorldImpl.sayHi("now u see me"); System.out.println(result); }}
运行结果:
Hi, now u see me
三.javaweb
1.新建web项目
MyEclipse建立一个web项目,整体目录如下:
HelloWorld.java
package com.now;import javax.jws.WebService;@WebService public class HelloWorld { public String sayHello(String name) { return ("Welcome, I am Server. Hello, " + name); } public int sum(int a, int b) { return a + b; } }
sun-jaxws.xml
<?xml version="1.0" encoding="UTF-8"?> <endpoints version="2.0" xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"> <endpoint name="HelloWorld" implementation="com.now.HelloWorld" url-pattern="/service/HelloWorld" /> </endpoints>
2.wsgen工具
(1)概述
wsgen 是在JDK自带的一个工具,该命 令的主要功能是用来生成合适的JAX-WS。它读取Web Service的类文件(Hello.class),同时生成所有用于发布Web Service所依赖的源代码文件、经过编译过的二进制类文件、WSDL文件和相关的xsd文件。
主要用于Server端通过Java类编译成Webservice及相关的wsdl文件
(2)参数含义
-wsdl:参数代表生成webservice
-s:参数代表生成的.java文件目录
-d: 参数代表生成的编译class文件目录
-r :参数代表生成的.wsdl文件与.xsd文件目录
-cp:参数代表classpath,即读取的类文件(Hello.class)所在的目录(不包括类文件的包目录)
wsgen -cp MyJaxWsWebProject\WebRoot\WEB-INF\classes com.now.HelloWorld -wsdl -s MyJaxWsWebProject\src -r MyJaxWsWebProject\wsdl
运行结果:
PS: wsgen工具是可选择的,可用可不用,因为会在runtime时自动生成。
3.JAR包
(1)所需jar包
下载的是jaxws-ri-2.2.10.zip,解压
FastInfoset.jargmbal-api-only.jarha-api.jarjavax.annotation.jarjavax.mail_1.4.jarjaxb-api.jarjaxb-impl.jarjaxb-xjc.jarjaxws-api.jarjaxws-rt.jarjaxws-tools.jarjsr181-api.jarmanagement-api.jarmimepull.jarpolicy.jarsaaj-api.jarsaaj-impl.jarstax-ex.jarstax2-api.jarstreambuffer.jarwoodstox-core-asl.jar
(2)jar包下载地址
https://jax-ws.java.net/2.2.10/
4.结果
客户端调用参考上面
四.Spring集成
jdk自带的webservices会占用一个独立的端口。
HelloWorld .java
package com.now;import javax.jws.WebMethod;import javax.jws.WebService;@WebServicepublic interface HelloWorld { @WebMethod public String sayHello(String name);}
HelloWorldImpl .java
package com.now;import javax.jws.WebService;import org.springframework.stereotype.Component;@Component@WebService(serviceName = "HelloWorldService", endpointInterface = "com.now.HelloWorld")public class HelloWorldImpl implements HelloWorld { public String sayHello(String name) { return "Hello," + name; }}
application.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.now"></context:component-scan> <bean class="org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter"> <property name="baseAddress" value="http://localhost:8090/services/"/> </bean></beans>
web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:application.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener></web-app>
pom.xml
<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.now</groupId> <artifactId>MySpringJaxWs</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.springframework.ws</groupId> <artifactId>spring-ws-core</artifactId> <version>2.1.4.RELEASE</version> </dependency> <dependency> <groupId>org.jdom</groupId> <artifactId>jdom</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>jaxen</groupId> <artifactId>jaxen</artifactId> <version>1.1.6</version> </dependency> </dependencies> </project>
五.wsgen与wsimport工具区别
参考
http://blog.csdn.net/rongbo_j/article/details/50975087
http://www.cnblogs.com/xiaotao726/p/4522955.html
http://www.mkyong.com/webservices/jax-ws/deploy-jax-ws-web-services-on-tomcat/
http://www.examclouds.com/java/web-services/wsimport-wsgen
http://blog.csdn.net/lifetragedy/article/details/7205832
- WebService(3):JAX-WS
- jax-ws webservice编程
- JAX-WS WebService
- JAX-WS实现WebService
- Jax WS发布webservice
- JAX-WS,WebService实例
- jax-ws webservice编程
- JAX-WS WebService发布
- WebService -- JAX-WS : 入门
- webService之JAX-WS
- jax-ws 处理webservice
- WebService JAX-WS 注释
- WebService:JAX-WS实现WebService
- 用JAX-WS开发webservice
- Jax-Ws创建WebService服务
- 八 JAX-WS webservice实现
- JAX-WS(JWS):Java WebService
- 利用jax-ws发布WebService
- LeetCode:Search Insert Position
- 第三周:88. Merge Sorted Array
- 支持向量机(SVM)(三)----核函数及正则化
- 国外程序员整理的Java资源
- MySQL · 引擎特性 · InnoDB IO子系统
- WebService(3):JAX-WS
- 北航2008年计算机复试上机
- 本月有几天(作业)
- 归并算法(Java版)
- leetcode 283. Move Zeroes python
- javascript实现链表
- 数组清空练习和游戏练习
- Unity 3D学习习题
- 对软件测试的理解