`
sjsky
  • 浏览: 918009 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JDK6 webservice的应用(注意SOAPBinding.Style不同的差异)

阅读更多
    blog迁移至:http://www.micmiu.com

   从JDK6.0开始,Java引入了对Web Service的支持。
   我们只需要简单的使用Java的Annotation标签即可将标准的Java方法发布成Web Service。
本文注意讲述下本人在实际运用中因为SOAPBinding.Style不同,在生成webwervice时的一些差异。
SOAPBinding.Style:PRCDOCUMENT JDK6 中默认的是DOCUMENT
下面通过具体的例子详细讲述JDK6 webservice的应用和差异。
1.DOCUMENT
  Java类:MessageJws.java 特别注意下 @SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
/**
 * JDK6 webservice
 * @author Michael sun
 */
@WebService(name = "messageJws", targetNamespace = "http://www.michael.com/messagejws")
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
public class MessageJws {

    /**
     * description WSDL with default
     * @param userName
     * @return String
     */
    @WebMethod
    public String sayLove(@WebParam(name = "userName")
    String userName) {
        return userName + " I love you .";
    }

    /**
     * description WSDL myself
     * @param girlName girlName
     * @param boyName boyName
     * @return String
     */

    @WebMethod(action = "sayWelcome", operationName = "sayWelcome", exclude = false)
    @WebResult(name = "returnWelcomeMessage")
    public String sayWelcome(@WebParam(name = "girlName")
    String girlName, @WebParam(name = "boyName")
    String boyName) {

        return girlName + " ," + boyName + "  welcome to JDK6 webservice.";
    }

}

   PS:如果发布webservice的java类的方法中有异常声明时,是不能直接发布成webservice的,
    需要用wsgen命令生成相应的异常处理的类。

   wsgen 命令 可以为我们生成wsdl 和异常处理的类(本例没有声明异常处理)
   本例的class目录结构如下:calsses\com\michael\MessageJws.class
   在执行下面的命令之前需要新建文件夹classes\wsdl\,用来存放生成wsdl文件
如果创建文件夹classes\bin\classes\src\:...\classes>执行下面的命令:
wsgen -cp . -r ./wsdl -s ./src -d ./bin -wsdl com.michael.MessageJws

如果不创建上面的src、bin文件夹则可以: ...\classes>执行下面的命令:
wsgen -cp . -r ./wsdl -s ./ -d ./ -wsdl com.michael.MessageJws

   这时在 calsses\com\michael\ 下看到生成了新的文件夹jaxws,jaxws目录下的文件如下:

  同时在刚才新建的 classes\wsdl\ 下生成了两个wsdl相关文件
MessageJwsService.wsdl 和 MessageJwsService_schema1.xsd详细见附见wsdl文件

  wsimpot 命令 可以很方便的用来构建Web Service的客户端。
在执行下面的命令之前需要在classer\下 新建文件夹bin和src
...\calasses->执行下面的命令:
wsimport -s ./src -d ./bin -p com.michael.messageclient ./wsdl/MessageJwsService.wsdl

  这时可以在 calsses\src\com\michael\messageclient\  路径下看到:


  到此 客户端已经生成好了。
2.RPC
如果把MessageJws.java 的改为:@SOAPBinding(style = SOAPBinding.Style.RPC)
执行wsgen 命令后,不同于上面DOCUMNET的:
  • 在 calsses\com\michael\ 下不会生成目录jaxws以及jaxws下的相关类。
  • 在 classes\wsdl\ 下只生成了一个文件:MessageJwsService.wsdl
详细见附见wsdl文件 执行wsimport 命令后在calsses\src\com\michael\messageclient\ 路径下看到:


和上面DOCUMENT生成客户端相比较明显不同。

PS: 本文中用到的 wsgen与wsimport命令说明
wsgen
wsgen是在JDK的bin目录下的一个exe文件(Windows版),该命令的主要功能是用来生成合适的JAX-WS。它读取Web Service的终端类文件,同时生成所有用于发布Web Service所依赖的源代码文件和经过编译过的二进制类文件。这里要特别说明的是,通常在Web Service Bean中用到的异常类会另外生成一个描述Bean,如果Web Service Bean中的方法有申明抛出异常,这一步是必需的,否则服务器无法绑定该对像。此外,wsgen还能辅助生成WSDL和相关的xsd文件。wsgen从资源文件生成一个完整的操作列表并验证web service是否合法,可以完整发布。
命令参数说明:

 -cp 定义classpath
 -r 生成 bean的wsdl文件的存放目录
 -s 生成发布Web Service的源代码文件的存放目录(如果方法有抛出异常,则会生成该异常的描述类源文件)
 -d 生成发布Web Service的编译过的二进制类文件的存放目录(该异常的描述类的class文件)
例如:
wsgen -cp ./bin -r ./wsdl -s ./src -d ./bin -wsdl com.michael.MessageJws


wsimport
wsimport也是在JDK的bin目录下的一个exe文件(Windows版),主要功能是根据服务端发布的wsdl文件生成客户端存根及框架,负责与Web Service 服务器通信,并在将其封装成实例,客户端可以直接使用,就像使用本地实例一样。对Java而言,wsimport帮助程序员生存调用web service所需要的客户端类文件.java和.class。要提醒指出的是,wsimport可以用于非Java的服务器端,如:服务器端也许是C#编写的web service,通过wsimport则生成Java的客户端实现。
命令参数说明:

 -d 生成客户端执行类的class文件的存放目录
 -s 生成客户端执行类的源文件的存放目录
 -p 定义生成类的包名
例如:
wsimport -d ./bin -s ./src -p com.michael.messageclient http://localhost:8088/messagejws?wsdl 

wsimport -d ./bin -s ./src -p com.michael.messageclient ./wsdl/MessageJwsService.wsdl 




  • 大小: 15 KB
  • 大小: 15.7 KB
  • 大小: 6.8 KB
分享到:
评论

相关推荐

    jdk6 开发webservice

    在Java开发中,Web Service是一种用于不同系统间进行远程通信的技术,允许应用程序通过网络共享功能和服务。JDK 6引入了JAX-WS(Java API for XML Web Services),它是一个标准的、基于注解的框架,简化了Web ...

    使用JAX-WS(JWS)发布WebService

    以下编译器不支持以Endpoint.publish方式发布document方式的soap,必须在service接口和实现类添加“@SOAPBinding(style = SOAPBinding.Style.RPC)”注解; 访问受限,似乎只能本机访问(应该会绑定到publish的URL上,...

    JWS_批注参考-Java_Web_Service_批注.docx

    - **示例**:`@SOAPBinding(style=SOAPBinding.Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)` #### 四、WebLogic特有JWS批注 除了标准的JSR-181批注之外,...

    JDK+CXF实现webservice简单案例

    @SOAPBinding(style = Style.DOCUMENT, use = Use.LITERAL) public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return "Hello, " + name; } } ``` 3....

    web服务开发 使用jdk6注解 注解分析

    `@SOAPBinding(style = SOAPBinding.Style.RPC)` 这个注解用于指定 SOAP 消息的风格。RPC(Remote Procedure Call)风格使得方法调用看起来像远程函数调用,它将方法参数封装为 SOAP 消息的主体部分。 `@WebResult`...

    cxf下开发webservice

    @SOAPBinding(style = SOAPBinding.Style.RPC) ``` 通常,RPC风格用于基于方法调用的Web服务,而Document风格则更侧重于数据交换。 3. `@WebMethod`: 这个注解用于标记接口中的方法,表示该方法是Web服务的一个操作...

    cxf webserice 开发指南

    @SOAPBinding(style = Style.RPC) public class HelloWorldService { public String sayHello(@WebParam(name = "name") String name) { return name + " say: Hello World "; } } ``` 这段代码利用了JDK 5的...

    CXF-WebService-开发指南、技术文档.docx

    - `@SOAPBinding(style = Style.RPC)`指定使用RPC风格的SOAP绑定,不加此注解可能会导致运行时异常。 - 如果使用的是JDK1.6早期版本,需要升级到1.6u17或更高,或者先使用APT(Annotation Processing Tool)预编译...

    CXF_SPRING

    @SOAPBinding(style = SOAPBinding.Style.RPC) public interface ICxfUserService { User getUserByName(@WebParam(name = "name") String name); // 其他方法... } ``` 为了实现这个接口,你需要创建一个具体的...

    CXF_WebService_开发指南、技术文档

    如果未添加`@SOAPBinding(style = Style.RPC)`注解,则可能会遇到异常。对于JDK 1.6及以下版本,也需要特别注意这一问题。解决方案包括使用`apt`命令进行预编译或者升级JDK至1.6u17及以上版本。 **发布服务**: ``...

    Web Service学习小结——基于JDK自带JAX-WS实现的web service

    - `@SOAPBinding(style = Style.RPC)`或`@SOAPBinding(style = Style.DOCUMENT)`定义了SOAP消息的编码风格。 6. **异常处理**: - Web服务中的错误通常通过SOAP Fault消息进行通信,JAX-WS允许开发者定义自定义的...

    Spring2+CXF实现webservice笔记

    在现代软件架构设计中,WebService 是一种非常重要的技术手段,它能够帮助开发者实现不同系统间的交互和服务共享。Spring 框架与 Apache CXF 结合使用可以极大简化 WebService 的开发过程。本文将基于提供的文件信息...

    JAVA CXF webservice的示例代码

    @SOAPBinding(style = Style.DOCUMENT, use = Use.LITERAL) public class HelloWorldServiceImpl implements HelloWorldService { @Override public String sayHello(String name) { return "Hello, " + name; }...

    基于xfire的WebService开发

    @SOAPBinding(style = Style.DOCUMENT, use = Use.LITERAL) String sayHello(String name); } ``` 接下来,我们需要实现这个接口。实现类可以包含实际的服务逻辑: ```java public class HelloWorldServiceImpl ...

    cxf实现webservice的项目实例

    @SOAPBinding(style = Style.DOCUMENT, use = Use.LITERAL) public class HelloWorldServiceImpl implements HelloWorldService { @Override public String sayHello(String name) { return "Hello, " + name; }...

    cxf 小案例 java webservice

    3. **生成WSDL**:CXF提供了基于接口生成WSDL的功能,通过添加`@SOAPBinding`注解并设置`style`为`document`,然后运行CXF的Server。 4. **配置CXF Server**:在主类中启动CXF的HTTP服务器,如`JettyServer`,并将...

Global site tag (gtag.js) - Google Analytics