使用JAX-WS(JWS)发布WebService(二)

  1.     将项目改为maven工程,并发布到Tomcat;
  2.     WebService常用到的注解以及作用;
  3.     发布过程中遇到的问题总结;

一、将项目改为maven工程,并发布到Tomcat;

    继续上一篇,将代码完善成一个web项目,并发布到Tomcat中。因为一些特殊原因我使用的是jdk1.7,Tomcat6.0:

    在pom.xml文件中我们引用了jaxws-rt包

<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.ycdhz</groupId>
    <artifactId>webservice</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    
    <properties>  
        <!-- 文件拷贝编码 -->  
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
        <!-- 输出编码 -->  
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>  
        <!-- 编译编码 -->  
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>  
    </properties>  

    <dependencies>
        <dependency>  
            <groupId>com.sun.xml.ws</groupId>  
            <artifactId>jaxws-rt</artifactId>  
            <version>2.2.10</version>  
        </dependency>
    </dependencies>
</project>

    在webappWEB-INF下添加sun-jaxws.xml

<?xml version="1.0" encoding="UTF-8"?>  
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
    <endpoint name="hello" implementation="com.ycdhz.web.HelloWServiceImpl" url-pattern="/hello" />  
</endpoints>  

    在webappWEB-INF下添加web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name>webservice</display-name>

    <listener>
          <listener-class>
              com.sun.xml.ws.transport.http.servlet.WSServletContextListener
          </listener-class>
    </listener>
    <servlet>
        <servlet-name>jaxws</servlet-name>
        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>jaxws</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

    将项目添加到Tomcat中启动,输入http://localhost:端口号/工程名/hello 访问成功:

二、WebService常用到的注解以及作用

注解 属性 作用
@WebService serviceName 对外发布的服务名,指定 Web Service 的服务名称:wsdl:service。默认值为 Java 类的简单名称 + Service。
endpointInterface 服务接口全路径, 指定做SEI(Service EndPoint Interface)服务端点接口
name 此属性的值包含XML Web Service的名称。在默认情况下,该值是实现XML Web Service的类的名称,wsdl:portType 的名称。
portName wsdl:portName。默认值为 WebService.name+Port。
targetNamespace 指定你想要的名称空间,默认是使用接口实现类的包名的反缀
@WebMethod operationName 指定与此方法相匹配的wsdl:operation 的名称。默认值为 Java 方法的名称。
action 定义此操作的行为。对于 SOAP 绑定,此值将确定 SOAPAction 头的值。默认值为 Java 方法的名称。
exclude 指定是否从 Web Service 中排除某一方法。默认值为 false。
@WebParam  name  参数的名称。如果操作是远程过程调用(RPC)类型并且未指定partName 属性,那么这是用于表示参数的 wsdl:part 属性的名称。
partName 定义用于表示此参数的 wsdl:part属性的名称。仅当操作类型为 RPC 或者操作是文档类型并且参数类型为BARE 时才使用此参数。
targetNamespace 指定参数的 XML 元素的 XML 名称空间。当属性映射至 XML 元素时,仅应用于文档绑定。默认值为 Web Service 的 targetNamespace。
mode 此值表示此方法的参数流的方向。有效值为 IN、INOUT 和 OUT。
header 指定参数是在消息头还是消息体中。缺省值为 false。
@WebResult    name 当返回值列示在 WSDL 文件中并且在连接上的消息中找到该返回值时,指定该返回值的名称。对于 RPC 绑定,这是用于表示返回值的 wsdl:part属性的名称。
targetNamespace 指定返回值的 XML 名称空间。仅当操作类型为 RPC 或者操作是文档类型并且参数类型为 BARE 时才使用此参数。
header 指定头中是否附带结果。缺省值为false。
partName 指定 RPC 或 DOCUMENT/BARE 操作的结果的部件名称。默认值为@WebResult.name。

 

三、发布过程中遇到的问题总结

    1、java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServletContextListener

            解决方法:检查项目中是不是没有引用jaxws-rt相关包;

                              因为tomcat 中缺少对jaxws的相关支持,所以需要下载jaxws-ri包,将包中lib下的jar文件复制一份到tomcat的lib包中;

    2、在生产的wsdl文件中,没有显示对应的参数类型和参数名

            解决方法:在接口中添加@SOAPBinding(style = Style.RPC)注解;

          

    3、maven工程无法添加到Tomcat6.0的服务中,提示Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules

            解决方法:修改工程目录下.settingsorg.eclipse.wst.common.project.facet.core.xml文件,将jst.web的版本改为2.5

           

 

 

原文地址:https://www.cnblogs.com/jiangyaxiong1990/p/9022551.html