`
tang9140
  • 浏览: 34551 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mvn构建JAX-WS项目含服务端和客户端代码实现

 
阅读更多

java中WebService框架有很多,像Axis,XFire,CXF等,除了上述框架外,JDK中自带JAX-WS框架。相比而言,JWS是轻量级的,使用非常简便,可与Spring集成使用。

下面就详述如何通过mvn构建WebService服务端及客户端。

1.引包。

在mvn项目的pom文件中加入依赖包

<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>2.2.8</version>
</dependency>

引完包后记得重新构建项目,命令方式如下

mvn eclipse:eclipse -Dwtpversion=2.0 -DdownloadSources=true

2.写服务端代码,举Hello服务类如下

@WebService
public class Hello {

    @WebMethod
    public String sayHello(@WebParam(name = "name") String name) {// @WebParam来指定wsdl文件schema的参数名称,而不是显示为arg0,arg1等,以增加可读性
        return String.format("Hello, %s", name);
    }
}

上面通过注解@WebService表明这是一个WebService类,其中注解@WebMethod、@WebParam非必需。

3.服务发布

有两种方式发布自己的WebService

  • 方式一:
public static void main(String[] args) {
    Endpoint.publish("http://localhost/HelloService", new Hello());
}

直接通过Endpoint.publish方式进行WebService发布,一般用作调试。运行该类后在浏览器访问http://localhost/HelloService如下图
这里写图片描述

  • 方式二:

发布到web容器中。下面以tomcat为例说明发布配置过程
在WEB-INF目录下新建sun-jaxws.xml文件(该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="HelloService" implementation="com.gvtv.learn.ws.server.Hello"
        url-pattern="/HelloService" />
<!-- url-pattern需要与web.xml中对应的servlet的url-pattern一致 -->
</endpoints>

然后修改web.xml,增加Listener和Servlet如下:

<!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>
    <display-name>Archetype Created Web Application</display-name>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:conf/spring-*.xml</param-value>
    </context-param>

    <listener>
        <listener-class>
            com.sun.xml.ws.transport.http.servlet.WSServletContextListener
        </listener-class>
    </listener>
    <servlet>
        <servlet-name>SayHiService</servlet-name>
        <servlet-class>
            com.sun.xml.ws.transport.http.servlet.WSServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SayHiService</servlet-name>
        <url-pattern>/HelloService</url-pattern>
    </servlet-mapping>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:conf/springMVC-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

注解sun-jaxws.xml中的url-pattern需要与web.xml中的servlet的url-pattern一致,如上例都为/HelloService(可任意取值)。
启动tomcat后浏览器中输入网址:http://localhost/jquery_ui/HelloService?wsdl(jquery_ui是本人的项目名),如看到wsdl文件则表明服务发布成功

4.java客户端调用

可利用JDK自带的wsimport工具生成基础代码

一、cmd界面下切换到项目的src\main\java目录下

二、执行命令

xxx\src\main\java>wsimport -encoding utf-8 -keep -d .\ -p com.gvtv.learn.ws.client http://localhost/jquery_ui/HelloService?wsdl

wsimport用法如下:

用法: wsimport [options] <WSDL_URI>

其中 [options] 包括:
  -d <directory>            指定放置生成的输出文件的位置
  -encoding <encoding>      指定源文件所使用的字符编码
  -help                     显示帮助
  -keep                     保留生成的文件(指保留java源文件)
  -p <pkg>                  指定目标程序包名

此时,在包com.gvtv.learn.ws.client下可看见生成的源文件如下
这里写图片描述

三、利用上面生成的java源文件调用web服务。示例如下:

public class Main {

    public static void main(String[] args) {
        Hello service = new HelloService().getHelloPort();
        String result = service.sayHello("屌丝!");
        System.out.println(result);
    }
}

可看到打印出信息

Hello, 屌丝!

至此,java版的WebService服务端和客户端就完成了,过程非常简单。下次补充下其它知识点

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    pooled-ws-client-test:池化 JAX-WS 客户端示例

    ###Building/Deploying 通过运行mvn install构建项目。 通过运行mvn jboss-as:deploy将项目部署到本地 JBoss。 ###运行测试使用 URL http://localhost:8080/hello/test?count=10&thread=5调用测试。 count可以是...

    JAX-WS发布webservice例子

    JAX-WS发布webservice例子,基于http://blog.csdn.net/yy_love_my/article/details/44938329所说的做的一个简单且能运行的列子,基于maven工程,如果使用servlet发布方式,执行命令:mvn tomcat7:run

    mvnjaxws:准系统jax-ws maven项目

    通过这个项目,你可以学习到如何配置Maven插件来自动生成服务端和客户端代码,理解JAX-WS的服务发布和调用机制,以及Maven在构建过程中的角色。这对你进一步提升Java Web服务开发能力具有重要意义。

    maven2书中代码 mvn-examples-1.0

    【 Maven2 详解:mvn-examples-1.0 代码实例】 Maven 是一个强大的项目管理和构建工具,尤其在Java开发中广泛使用。`mvn-examples-1.0`是一个示例集合,用于展示Maven2的核心功能和用法。这个压缩包中的代码例子...

    ECommerce-WS:ECommerce-WS - 使用 JAX-WS 库的 OrderService

    电子商务-WS ... 它在 Maven 构建期间使用该项目。 要将 jar 安装到 Maven 存储库中,请使用: mvn install:install-file -Dfile= -DgroupId=&lt;com&gt; -DartifactId=电子商务共享 -Dversion=1.1 -Dpackaging=jar

    test-mvn clean install -Dmaven.test.skip=true dependency:sources

    至于标签“源码”和“工具”,这表明文章可能涵盖了与源代码管理和开发工具相关的内容,尤其是Maven作为Java开发的重要工具,如何帮助开发者管理项目依赖、构建和调试。 文件名 "diana-project" 提示这是一个项目的...

    使用Eclipse开发基于SpringBoot+JAX-RS的Restful服务.docx

    它是JSR 339的一部分,定义了API来实现客户端和服务器端的RESTful服务。JAX-RS允许开发者使用注解来声明资源方法和服务接口,简化了REST服务的开发。 **Restful服务** 是一种软件架构风格,用于设计网络应用程序。...

    Cmd执行mvn clean package 命令使用文档

    执行`mvn clean package`命令,该命令的作用是清理并构建项目。其中,“clean”目标会清除之前的构建结果,“package”目标则会重新构建项目并生成可发布的包。 #### 四、Maven命令详解 1. **clean**:清理目标...

    maven权威指南高清版+mvn-examples-1.0.zip MAVEN权威指南对应示例代码

    `mvn-examples-1.0.zip` 是与该指南配套的示例代码,包含了多个实际项目案例,用于演示Maven在不同场景下的应用。这些例子涵盖了从基本的项目结构设置到高级功能的使用,例如模块化构建、依赖管理和插件定制等。通过...

    jax-rs-performance:比较每个请求和单例 JAX-RS 资源类的性能

    该项目包括 4 个资源类:2 个每个请求范围和 2 个单例。 两个只是返回一个查询参数。 在另外两个资源中,我们将通过@Context 注入 UriInfo。 上下文特定于特定请求。 因此,在请求范围的资源上,它可以在创建时注入...

    Zookeeper服务端&客户端编译脚本

    本压缩包"Zookeeper服务端&客户端编译脚本"提供了一种在Ubuntu系统下便捷编译Zookeeper服务端和客户端的解决方案,这对于开发者来说是非常有价值的,因为它可以节省大量手动编译的时间,特别是对于那些需要频繁调整...

    ws-jax-rs-rest:带有 JAX-RS 的基本 RESTful Web 服务

    带有 JAX-RS 的 RESTful Web 服务 带有 JAX-RS 的基本 RESTful Web 服务 ... 使用提供的 build.sh 脚本构建映像 、 和 使用启动容器 使用 maven 部署 $ mvn wildfly:deploy -Dwildfly.username=admin -Dwildfly.passw

Global site tag (gtag.js) - Google Analytics