您的位置:首页 > 其它

JAX-WS开发webservice示例详解

2013-08-01 15:06 387 查看
概述

实验环境

服务端的实现

客户端的实现

[一]、概述

JavaAPIforXMLWebServices(JAX-WS)是Java程序设计语言一个用来创建Web服务的API。

在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI(serviceendpointinterface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。

在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。

当然JAX-WS也提供了一组针对底层消息进行操作的API调用,你可以通过Dispatch直接使用SOAP消息或XML消息发送请求或者使用Provider处理SOAP或XML消息。

JAX-WS2.0(JSR224)是Sun新的webservices协议栈,是一个完全基于标准的实现。在binding层,使用的是the
JavaArchitectureforXMLBinding(JAXB,JSR222),在parsing层,使用的是the
StreamingAPIforXML(StAX,JSR173),同时它还完全支持schema规范。

JAX-WS与JAX-RPC的区别可参见:http://java.sun.com/xml/faq.html#JAX-WS-and-JAX-RPC-difference

JAX-WS一些参考资料:

JAX-RPC2.0renamed
toJAX-WS2.0

The
JavawebserviceTutorial

javax.jws.WebService

[二]、实验环境

javaversion“1.6.0_18″、Eclipse3.7

maven构建项目:mvnarchetype:create-DgroupId=com.micmiu.jaxws.demo-DartifactId=jaxws-demo-DarchetypeArtifactId=maven-archetype-quickstart-DinteractiveMode=false

[三]、服务端的实现

1.最基本的实例

编写接口代码:HelloService.java

1
package
com.micmiu.jaxws.demo;
2
3
/**
4
*
bloghttp://www.micmiu.com
5
*
6
*
@authorMichael
7
*/
8
public
interface
HelloService
{
9
String
sayHello(StringuserName);
10
}
实现接口并添加webservice注释:HelloServiceImpl.java

1
package
com.micmiu.jaxws.demo.impl;
2
3
import
javax.jws.WebMethod;
4
import
javax.jws.WebParam;
5
import
javax.jws.WebService;
6
import
javax.jws.soap.SOAPBinding;
7
8
import
com.micmiu.jaxws.demo.HelloService;
9
10
/**
11
*
bloghttp://www.micmiu.com
12
*
13
*
@authorMichael
14
*/
15
@WebService
()
16
//默认SOAPBinding
style=Style.DOCUMENT
17
@SOAPBinding
()
18
public
class
HelloServiceImpl
implements
HelloService
{
19
20
@WebMethod
21
public
String
sayHello(
@WebParam
(name
=
"userName"
)
StringuserName){
22
return
"hi,"
+
userName+
"
welcomtowww.micmiu.com"
;
23
}
24
25
}
编写服务端发布代码:ServerStart.java

1
package
com.micmiu.jaxws.demo;
2
3
import
javax.xml.ws.Endpoint;
4
5
import
com.micmiu.jaxws.demo.impl.HelloServiceImpl;
6
7
/**
8
*
bloghttp://www.micmiu.com
9
*
10
*
@authorMichael
11
*/
12
public
class
ServerStart
{
13
14
/**
15
*
@paramargs
16
*/
17
public
static
void
main(String[]
args){
18
System.out.println(
"start
publishjax-ws..."
);
19
HelloService
service=
new
HelloServiceImpl();
20
Endpoint.publish(
"http://localhost:8082/HelloService"
,
service);
21
System.out.println(
"publish
webservicesuccessful"
);
22
}
23
24
}
运行ServerStart,日志如下:
startpublishjax-ws...
2012-7-1210:56:41com.sun.xml.internal.ws.model.RuntimeModelergetRequestWrapperClass
信息:DynamicallycreatingrequestwrapperClasscom.micmiu.jaxws.demo.impl.jaxws.SayHello
2012-7-1210:56:42com.sun.xml.internal.ws.model.RuntimeModelergetResponseWrapperClass
信息:DynamicallycreatingresponsewrapperbeanClasscom.micmiu.jaxws.demo.impl.jaxws.SayHelloResponse
publishwebservicesuccessful


浏览器打开:http://localhost:8082/HelloService?wsdl回车显示如下:





可见服务端已经发布成功。

运用JDK自动的命令:wsgen生成wsdl文件和异常处理的相关类

ps:如果webservice中有异常声明,必须用wsgen生成常处理的相关类之后,才能发布。

按win+R键,输入cmd回车进入命令行界面,切换到target下创建目录ws,在执行如下命令:

1
mkdir
ws\bin
ws\srcws\wsdl
bin->存放生成的class文件

src->存放生成的源代码文件

wsdl->存放生成的wsdl文件

再执行如下命令:

1
wsgen
-
cp
.;classes/
-rws/wsdl-sws/src-dws/bin-wsdlcom.micmiu.jaxws.demo.impl.HelloServiceImpl
生成后的目录如下:
D:\workspace_dev\jaxws-demo\target>tree/Fws
卷work的文件夹PATH列表
卷序列号为2AF7-9BD9
D:\WORKSPACE_DEV\JAXWS-DEMO\TARGET\WS
├─bin
│└─com
│└─micmiu
│└─jaxws
│└─demo
│└─impl
│└─jaxws
│SayHello.class
│SayHelloResponse.class

├─src
│└─com
│└─micmiu
│└─jaxws
│└─demo
│└─impl
│└─jaxws
│SayHello.java
│SayHelloResponse.java

└─wsdl
HelloServiceImplService.wsdl
HelloServiceImplService_schema1.xsd


2.@WebService指定endpointInterface实例

修改接口代码:HelloService.java

1
package
com.micmiu.jaxws.demo;
2
3
import
javax.jws.WebMethod;
4
import
javax.jws.WebParam;
5
import
javax.jws.WebService;
6
import
javax.jws.soap.SOAPBinding;
7
import
javax.jws.soap.SOAPBinding.Style;
8
9
/**
10
*
bloghttp://www.micmiu.com
11
*
12
*
@authorMichael
13
*/
14
@WebService
15
@SOAPBinding
(style
=Style.DOCUMENT)
16
public
interface
HelloService
{
17
@WebMethod
18
String
sayHello(
@WebParam
(name
=
"userName"
)
StringuserName);
19
}
修改接口实现类:HelloServiceImpl.java

1
package
com.micmiu.jaxws.demo.impl;
2
3
import
javax.jws.WebService;
4
5
import
com.micmiu.jaxws.demo.HelloService;
6
7
/**
8
*
bloghttp://www.micmiu.com
9
*
10
*
@authorMichael
11
*/
12
@WebService
(endpointInterface
=
"com.micmiu.jaxws.demo.HelloService"
)
13
public
class
HelloServiceImpl
implements
HelloService
{
14
public
String
sayHello(StringuserName){
15
return
"hi,"
+
userName+
"
welcomtowww.micmiu.com"
;
16
}
17
18
}
运行ServerStart启动程序,可通过运行日志和浏览器访问wsdl文件进行验证。

[四]、客户端的实现

1.wsimport生成客户端

按win+R键,输入cmd回车进入dos,切到target目录,然后创建目录:client、client\bin、client\src

在target目录下运行如下命令回车即可生成客户端文件:

1
wsimport
-sclient/src-dclient/bin-pcom.micmiu.jaxws.clienthttp://localhost:8082/HelloService?wsdl
生成源文件目录结构如下:
D:\WORKSPACE_DEV\JAXWS-DEMO\TARGET\CLIENT\SRC
└─com
└─micmiu
└─jaxws
└─client
HelloServiceImpl.java
HelloServiceImplService.java
ObjectFactory.java
package-info.java
SayHello.java
SayHelloResponse.java


2.编写客户端测试程序:HelloClient.java

1
package
com.micmiu.jaxws.client;
2
3
/**
4
*
bloghttp://www.micmiu.com
5
*
@authorMichael
6
*/
7
public
class
HelloClient
{
8
9
/**
10
*
@paramargs
11
*/
12
public
static
void
main(String[]
args){
13
HelloServiceImplService
service=
new
HelloServiceImplService();
14
HelloServiceImpl
hello=service.getHelloServiceImplPort();
15
System.out.println(
"start
webserviceclient..."
);
16
System.out.println(
"send
Michaeltoserver"
);
17
System.out.println(hello.sayHello(
"Michael"
));
18
System.out.println(
"test
clientend."
);
19
}
20
21
}
运行测试程序,日志如下:
startwebserviceclient...
sendMichaeltoserver
hi,Michaelwelcomtowww.micmiu.com
testclientend.


可见客户端调用成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: