快捷搜索:

使用NetBeans5.0建立JAX-WS2.0服务

这篇文章主要先容若何应用NetBeans5.0的内置特性快速建立JAX-WS2.0办事。一旦创建了工程,就可以应用一个敕令进行编译(和测试)。NetBeans的新版本具有创建JAX-RPC1.x办事的能力,而JAX-WS2.0仍然在开拓中。应用JAX-WS2.0创建web service的步骤已经进行了简化,应用很少的步骤你就可以将NetBeans中的web利用转化为web service。

前两部分描述得到和设置NetBeans IDE以及JAX-WS代码。第三部分包孕了关于创建一个包孕web service的web工程以及要用到的示例代码的信息。着末一部分描述了使用这个工程你自己的web service的技术,也是从WSDL开初创建一个办事的指示。留意JAX-WS2.0必要J2SE5.0。

这篇指南包孕以下话题:

1、 设置情况

2、 应用JAX-WS2.0库创建一个新的Web利用

3、 建立一个办事

l 从 Java创建一个办事

4、 测试和调试

l 在Web Services Registry中测试办事

l 创建一个单元测试

l 调试客户端

5、 技术

l 从WSDL创建办事

l 编写你自己的JAX-WS2.0 Web Services

1、 设置情况

在开始编写代码前,你必须包管已经拥有所有的必须软件。

安装软件

开始之前,你必要在机械上安装以下软件:

l NetBeans IDE 5.0(下载

l Java SDK 5.0(下载

对付本文中的例子,只必要两个步骤对NetBeans进行设置。第一步(强烈建议)删除或者重命名包孕在Tomcat(内置于NetBeans5.0中)中的JAXP jar文件。这些文件已经包孕在了JDK5.0中了(JAX-WS必须)。在NetBeans中这些文件路径是/enterprise2/jakarta-tomcat-5.5.9/common/endorsed。你可以改动.jar扩展名以至于不能加载或者完全删除。只管双份的jar包不应该造成冲突,仍旧强烈建议从Tomcat中删除它们。

http://jax-ws.dev.java.net工程获得JAX-WS2.0二进制版本。从Downloads/Nightly页面下载JAX-WS2.0二进制安装文件,运行“java -jar JAXWS_SI_rrrrmmdd.jar”进行安装。

警告:不要应用最新的官方JAX-WS RI 2.0 EA2版本,由于它和例子要用到的wsimport和wsgen义务不兼容。下一个版本(JAX-WS RI 2.0 EA3)应该可以事情。

为了使Tomcat办事器能够造访JAX-WS2.0库,将所有的jar文件从/lib directory复制到/enterprise2/jakarta-tomcat-5.5.9/common/lib文件夹下。

2、 应用JAX-WS2.0库创建一个新的Web利用

选择File—〉New Project(Ctrl-Shift-N)。在Categories下选择Web,然后选择Web Application。输入“JAX-WS20Project”作为Project Name,指定Project Location目录,确保在Server下拉框中Bundled Tomcat (5.5.9)办事器当选中。

点击Next,然后点击Finish。

点击菜单栏中的Tools,然后选择Library Manager。点击New Library按钮,输入“JAX-WS20”,点击OK。因为在New Library中ClassPath打开着,点击Add JAR/Folder,从/lib文件夹下选择所有的jar文件。

JAX-WS20 jar文件列表:

在Projects试图中打开JAX-WS20工程,在Libraries节点打开Add Library。选择JAX-WS20库,点击Add Library按钮。

正常环境下,所有的jar文件在编译历程中都邑被放置在web工程的war文件中(WEB-INF/lib文件夹下)。由于我们已经把这些jar文件复制到Tomcat办事器中了,以是就不必要再作为可宣布的war包的一部分了。

为了减小可宣布war包的大年夜小,我们将JAX-WS20库从war包中扫除,通以前掉落对Libraries节点→Properties对话框中Package复选框的选择。

不选择Package复选框:

点击OK。

JAX-WS20Project就完成了创建一个JAX-WS20办事的筹备事情了。

3、 建立一个办事

从Java创建一个办事

增添办事类。在Projects视图中右键点击JAX-WS20Project节点,选择New和Java Class。输入“ServiceImpl”到Class Name栏中,“my.sample.server”到Package栏中,点击Finish。实现一个web service hello(java.lang.String)操作,使用JAX-WS2.0注释指定portType名称、办事名称和目标命名空间:

package my.sample.server;

import javax.jws.WebParam;

import javax.jws.WebService;

import javax.jws.WebMethod;

/**

* A simple java class that will become a web service.

*/

@WebService(name="Hello", serviceName="HelloService", targetNamespace="http://example.com")

public class ServiceImpl {

@WebMethod

public String hello(@WebParam(name="name") String s) {

System.out.println("Service received: " + s);

return "Hello "+s;

}

}

编译(F9)ServiceImpl类。

警告:为了使注释能够支持,JAX-WS20Project中的Source Level应该设置为1.5(在JAX-WS20Project节点调用Properties动作):

改动在Web Pages/WEB-INF文件夹下的宣布描述符(web.xml),指定JAX-WS servlet类和ServletContextListener:

version="1.0" encoding="UTF-8"?>

xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

com.sun.xml.ws.transport.http.servlet.WSServletContextListener

my_service

com.sun.xml.ws.transport.http.servlet.WSServlet

1

my_service

/hello

30

index.jsp

在Web Pages/WEB-INF目录下创建sun-jaxws.xml文件(在WEB-INF节点下创建新的XML文档,在File Name栏中输入sun-jaxws)。sun-jaxws.xml文件被JAX-WS运行时用到,并且指定了办事终端实现类和相对URL:

version="1.0" encoding="UTF-8"?>

name='Hello'

implementation='my.sample.server.ServiceImpl'

url-pattern='/hello'/>

着末一不是添加下面的xml片段到JAX-WS20Project/build.xml文件。为了编辑工程的build.xml文件,你可以应用菜单栏中的File→Open File或者打开Files选项卡而不是Projects,打开JAX-WS20Project节点,双击build.xml。这个target在编译办事类后将要被NetBeans调用,却是在创建war文件前。wsgen ant义务将会创建办事必要的JAXB和JAX-WS文件。关于wsgen对象的更多信息拜见JAX-WS文档。

artifacts that will be included in the war file. -->

debug="true"

keep="true"

destdir="build/web/WEB-INF/classes"

resourcedestdir="build/web/WEB-INF/classes"

sei="my.sample.server.ServiceImpl">

为了创建和启动办事,从菜单栏中选择Run和Run Main Project,或者应用快捷键F6。作为可选的(然则很有赞助)步骤,右键点击工程名称,选择Properties。选择“Run”节点,在右面的“Relative URL”栏中输入“/hello”。经由过程设置这个值,当你运行这个工程时,NetBeans会在浏览器中孕育发生“http://localhost:8084/JAX-WS20Project/hello”地址。这就容许你在宣布办事时进行确认,并且假如乐意你也可以查看wsdl文件。你可以改动办事类,只必要点击F6从新编译和宣布办事,就可以看到在wsdl中发生了什么变更。

正常环境下,hello办事信息应该在浏览器窗口中呈现。这就标志着办事宣布成功。

端口名称

状态

信息

Hello

活动(ACTIVE)

地址:http://localhost:8084/JAX-WS20Project/hello

WSDL:http://localhost:8084/JAX-WS20Project/hello?wsdl

端口 QName:{http://example.com}HelloPort

实现类:my.sample.server.ServiceImpl

假如与上不合,在Output Window中查看Bundlet Tomcat(5.5.9)日志文件查看问题的泉源。

4、 测试和调试

在Web Service Registry中测试办事

测试办事最简单的措施便是应用包孕在NetBeans5.0中的Web Services Resgistry。在Runtime选项卡中右键点击Web Services,选择Add WebService。在“URL”栏中,输入web service WSDL文件的地址,在这里是“http://localhost:8084/JAX-WS20Project/hello?wsdl”,点击Get Web Service Description。这将会孕育发生web service的信息。为了测试hello()操作,点击操作名称左右的Test Operation。然后输入一个发送值,察看返回了什么(在这里,改动办事实现类为返回字符串增添一些文本大概是有用的)。点击Close退出测试。

在Web Service Registry中测试办事:

假如乐意你可以经由过程点击Add按钮添加办事到注册器中:

那么,你可以在任何时刻打开注册器,双击hello节点测试hello操作。

创建一个单元测试

对付一个包孕web利用的完备利用法度榜样,你可以正常的为这个利用创建一个新的工程。为了简单地为测试我们的新web service创建一个客户端,可以用NetBeans的单元测试功能。

由创建一个新的JUnit测试用例开始。在Projects选项卡中右键点击Test Packages节点,选择New→File/Folder→JUnit→Empty Test。在Class Name中输入“Service Test”,Package中输入“my.sample.test”,点击Finish。按照下面的措施实现testService()措施:

package my.sample.test;

import junit.framework.*;

import my.sample.test.generated.Hello;

import my.sample.test.generated.HelloService;

public class ServiceTest extends TestCase {

public ServiceTest(String testName) {

super(testName);

}

protected void setUp() throws Exception {

}

protected void tearDown() throws Exception {

}

// TODO add test methods here. The name must begin with 'test'. For example:

public void testService() {

HelloService service = new HelloService();

Hello proxy = service.getHelloPort();

String request = "Apples and Pears";

String response = proxy.hello(request);

System.out.println(response);

}

}

在运行前,添加这段xml代码到build.xml文件中。NetBeans会在编译和运行测试客户端前调用这个target。当这个target运行时,它确保办事被编译和宣布(若必要就从新编译)。关于wsimport对象的更多信息拜见JAX-WS文档。

generate client artifacts before building test. -->

AddNumbers.wsdl。首先复制这个文件到“JAX-WS20Project/web/WEB-INF/wsdl”文件夹下。

然后添加新的到web.xml文件中:

my_service

/addNumbers

(留意的值和Hello办事中的一样)。

添加新的到sun-jaxws.xml文件中:

implementation="my.sample.server.AddNumbersImpl"

wsdl="WEB-INF/wsdl/AddNumbers.wsdl"

service='{http://duke.org}AddNumbersService'

port='{http://duke.org}AddNumbersPort'

url-pattern="/addNumbers"/>

你还必要创建包孕wsimport义务的“-pre-compile”target,它会在履行compile target之前被运行。我们的target会调用义务孕育发生WSDL文件(和引用的schema文件)中所有必须的java artifact。

java artifacts that will created and compiled to WEB-INF/classes directory. -->

running wsimport

debug="true"

keep="true"

destdir="build/web/WEB-INF/classes"

package="wsimport.generated.addnumbers"

wsdl="${basedir}/web/WEB-INF/wsdl/AddNumbers.wsdl"/>

留意:java artifact会天生到“WEB-INF/classes”文件下的“wsimport.generated.addnumbers”包中。

着末,你应该创建一个办事实现类(可以创建在同一个包中而非ServiceImpl):

package my.sample.server;

import javax.jws.WebService;

import wsimport.generated.addnumbers.*;

/**

* A simple java class to implement a web service. Until the

* endpoint interface has been generated, the class declaration

* below will show up as a compiler error.

*/

@WebService(endpointInterface="wsimport.generated.addnumbers.AddNumbersPortType")

public class AddNumbersImpl implements AddNumbersPortType {

public void oneWayInt(int arg0) {

System.out.println("received value "+arg0);

}

public int addNumbers(int arg0,int arg1) throws AddNumbersFault_Exception {

if (arg0throw new AddNumbersFault_Exception("negative number",new AddNumbersFault());

return arg0+arg1;

}

}

(实现类必须实现由wsimport义务天生的办事终端接口)

现在可以进行编译和宣布这个工程了。

假如你运行工程,接下来的页面在浏览器中呈现:

端口名称

Status(状态)

Information(信息)

Hello

ACTIVE

地址:http://localhost:8084/JAX-WS20Project/hello

WSDL:http://localhost:8084/JAX-WS20Project/hello?wsdl

端口QName:{http://example.com}HelloPort

实现类:my.sample.server.ServiceImpl

AddNumbers

ACTIVE

地址:http://localhost:8084/JAX-WS20Project/addNumbers

WSDL:http://localhost:8084/JAX-WS20Project/addNumbers?wsdl

端口QName:{http://duke.com}AddNumbersPort

实现类:my.sample.server.AddNumbersImpl

你也可以应用和Hello办事同样的要领测试和调试AddNumbers办事。这是从NetBeans Web Service Registry的一个屏幕截图:

编写你自己的JAX-WS20 Web Services

为了编写你自己的办事,你可以添加别的一个办事实现类到这个工程中或者新建一个工程。你还必要添加新的元素到web.xml中,新的元素到sun-jaxws.xml中。别的,还要在build.xml文件中增添新的义务(用来从java类天生web service)或者新的义务(用来从WSDL天生web service)。

更多的赞助请参考JAX-WS Project文档。

您可能还会对下面的文章感兴趣: