`

使用JDK1.6的JAX-WS编写WebService

阅读更多
1. Web services概念

Web services是客户端和服务端通过万维网的HTTP协议进行交互.

3.JAX-WS实现简单的Web services

3.1 建一个名为HelloServer的Web应用作为Webservice客户端

3.2 在HelloServer应用下新建一个类:
package helloservice.endpoint;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public class Hello {
	private String message = new String("Hello, ");

	public void Hello() {
	}

	@WebMethod
	public String sayHello(String name) {
		return message + name + "."; 
	}
}


3.3 在weblogic下发布HelloServer应用,应用名为WebRoot

3.4 在IE里面打开http://localhost:7001/WebRoot/HelloService?wsdl

如果可以查看到wsdl的内容说明发布成功.比如:
  <?xml version="1.0" encoding="UTF-8" ?> 
- <!--  Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Oracle JAX-WS 2.1.3-07/10/2008 08:41 PM(bt). 
  --> 
- <!--  Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Oracle JAX-WS 2.1.3-07/10/2008 08:41 PM(bt). 
  --> 
- <definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://endpoint.helloservice/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://endpoint.helloservice/" name="HelloService">
- <types>
- <xsd:schema>
  <xsd:import namespace="http://endpoint.helloservice/" schemaLocation="http://localhost:7001/WebRoot/HelloService?xsd=1" /> 
  </xsd:schema>
  </types>
- <message name="sayHello">
  <part name="parameters" element="tns:sayHello" /> 
  </message>
- <message name="sayHelloResponse">
  <part name="parameters" element="tns:sayHelloResponse" /> 
  </message>
- <portType name="Hello">
- <operation name="sayHello">
  <input message="tns:sayHello" /> 
  <output message="tns:sayHelloResponse" /> 
  </operation>
  </portType>
- <binding name="HelloPortBinding" type="tns:Hello">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> 
- <operation name="sayHello">
  <soap:operation soapAction="" /> 
- <input>
  <soap:body use="literal" /> 
  </input>
- <output>
  <soap:body use="literal" /> 
  </output>
  </operation>
  </binding>
- <service name="HelloService">
- <port name="HelloPort" binding="tns:HelloPortBinding">
  <soap:address location="http://localhost:7001/WebRoot/HelloService" /> 
  </port>
  </service>
  </definitions>


3.5 运行wsimport

wsimport是JDK1.6特有的,[JAVA_HOME]/bin下.

3.5.1 在E:\Program Files\PowerCmd>目录下,新建一个文件夹generate.

3.5.2 运行如下命令:
wsimport -s generate http://localhost:7001/WebRoot/HelloService?wsdl
如果返回
parsing WSDL...


generating code...
说明运行成功.

3.5.3 查看generate目录,可以看到生成了JAVA文件,与generate同级的目录下,还有class文件.(这里生成的JAVA文件,客户端需要用到)
生成的HelloService.java如下:

package helloservice.endpoint;

import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceFeature;


/**
 * This class was generated by the JAX-WS RI.
 * JAX-WS RI 2.1.1 in JDK 6
 * Generated source version: 2.1
 * 
 */
@WebServiceClient(name = "HelloService", targetNamespace = "http://endpoint.helloservice/", wsdlLocation = "http://localhost:7001/WebRoot/HelloService?wsdl")
public class HelloService
    extends Service
{

    private final static URL HELLOSERVICE_WSDL_LOCATION;

    static {
        URL url = null;
        try {
            url = new URL("http://localhost:7001/WebRoot/HelloService?wsdl");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        HELLOSERVICE_WSDL_LOCATION = url;
    }

    public HelloService(URL wsdlLocation, QName serviceName) {
        super(wsdlLocation, serviceName);
    }

    public HelloService() {
        super(HELLOSERVICE_WSDL_LOCATION, new QName("http://endpoint.helloservice/", "HelloService"));
    }

    /**
     * 
     * @return
     *     returns Hello
     */
    @WebEndpoint(name = "HelloPort")
    public Hello getHelloPort() {
        return (Hello)super.getPort(new QName("http://endpoint.helloservice/", "HelloPort"), Hello.class);
    }

    /**
     * 
     * @param features
     *     A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
     * @return
     *     returns Hello
     */
    @WebEndpoint(name = "HelloPort")
    public Hello getHelloPort(WebServiceFeature... features) {
        return (Hello)super.getPort(new QName("http://endpoint.helloservice/", "HelloPort"), Hello.class, features);
    }

}



3.6 建一个名为HelloClient的Web应用作为WebService客户端

3.7 将3.5.3生成的JAVA文件复制到HelloClient的src下.

3.8 新建一个HelloServlet文件,如下:
package webclient;

import helloservice.endpoint.HelloService;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.ws.WebServiceRef;

@WebServlet(name = "HelloServlet", urlPatterns = { "/HelloServlet" })
public class HelloServlet extends HttpServlet {
	@WebServiceRef(wsdlLocation = "http://localhost:7001/WebRoot/HelloService?wsdl")
	private HelloService service;

	/**
	 * Constructor of the object.
	 */
	public HelloServlet() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		processRequest(request, response);
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		processRequest(request, response);
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
	}
	
	/**
	 * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
	 * methods.
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 * @throws ServletException
	 *             if a servlet-specific error occurs
	 * @throws IOException
	 *             if an I/O error occurs
	 */
	protected void processRequest(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		try {
			out.println("<html lang=\"en\">");
			out.println("<head>");
			out.println("<title>Servlet HelloServlet</title>");
			out.println("</head>");
			out.println("<body>");
			out.println("<h1>Servlet HelloServlet at "
					+ request.getContextPath() + "</h1>");
			out.println("<p>" + sayHello("world") + "</p>");
			out.println("</body>");
			out.println("</html>");
		} finally {
			out.close();
		}
	}

	// doGet and doPost methods, which call processRequest, and
	// getServletInfo method
	private String sayHello(java.lang.String arg0) {
		helloservice.endpoint.Hello port = service.getHelloPort();
		return port.sayHello(arg0);
	}
}


3.9 配置HelloClient的Web.xml,增加如下代码:
<servlet>
  	<description>HelloServlet</description> 
  	<display-name>HelloServlet</display-name>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>webclient.HelloServlet</servlet-class>
  </servlet>
<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/servlet/HelloServlet</url-pattern>
  </servlet-mapping>


3.10 发布HelloClient应用

3.11 在IE录入http://localhost:7111/servlet/HelloServlet
页面内容如下说明WebService调用成功!
  • 大小: 32.9 KB
分享到:
评论

相关推荐

    基于JDK自带的Web服务JAX-WS实现WebService的简单示例

    Java 基于第三方插件实现WebService实在麻烦,尤其是要添加几十M的Jar包...还好,自从JDK 1.6开始,Java自身已经支持WebSeervice的开发即JAX-WS,附件是一个简单的示例,供入门参考。注意,JDK环境要求1.6及以上版本。

    jax-ws发布webservice

    在这个场景中,我们将深入探讨如何使用JDK 1.6及以上版本内置的JAX-WS来发布Web服务。 一、JAX-WS基础 1. **定义服务接口**:在JAX-WS中,我们首先定义一个Java接口,该接口声明了Web服务提供的操作。这些接口方法...

    Jax-ws所需要的JAR包

    在Java应用服务器,如Tomcat中使用JAX-WS时,通常需要一些特定的JAR文件来支持其功能。这些JAR文件包含了JAX-WS的运行时库和相关的服务实现。描述中提到的"Jax-ws所需要的JAR包"很可能包括了以下几个关键组件: 1. ...

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

    - 在JAX-WS中,开发者可以使用注解(如`@WebService`、`@SOAPBinding`、`@WebMethod`等)来标记服务接口和方法,这些注解提供了元数据,帮助生成WSDL和客户端代码。 5. **协议和绑定**: - JAX-WS支持多种传输...

    使用JAX-WS开发WebService入门教程.pdf

    ### 使用JAX-WS开发WebService入门教程 #### 一、准备工作 在开始使用JAX-WS开发WebService之前,首先需要确保开发环境满足以下条件: 1. **Java版本**:需要安装Java SE 1.5或更高版本。这是因为JAX-WS自Java SE...

    使用JAX-WS(JWS)发布WebService

    使用JAX-WS(JWS)发布WebService 使用myeclipse开发java的webservice的两种方式 方式一: (此方式只能作为调试,有以下bug:jdk1.6u17?以下编译器不支持以Endpoint.publish方式发布document方式的soap,必须在...

    上传一个基于Jax-ws的WebService

    这篇博客文章“上传一个基于Jax-ws的WebService”可能详细介绍了如何使用JAX-WS技术构建和发布一个Web服务。虽然具体的描述为空,但我们可以根据标题推测,作者可能涵盖了以下几个关键步骤: 1. **环境准备**:首先...

    jax-ws-webservice开发

    ### JAX-WS WebService开发详解 ...通过以上详细的步骤,我们可以看到如何使用MyEclipse来进行JAX-WS WebService的开发和部署。这种开发方式不仅简单易懂,而且能够快速构建出功能完备的WebService应用。

    jax-ws用户指南 pdf版

    - **运行环境**:说明了在 JDK 6 上运行 JAX-WS 的特定要求。 - **依赖库**:列出了必需的 JAR 文件及其版本。 - **限制条件**:指出了当前版本中存在的已知限制。 - **修复的 Bug**:列出了在此版本中修复的错误...

    java WebService Jax-WS创建

    总结来说,创建Java WebService Jax-WS主要涉及创建项目、编写服务类、生成Web服务,以及在MyEclipse环境中部署和测试。通过这些步骤,开发者可以快速地将Java类转换为可供其他系统调用的Web服务。

    JDK1.6支持WebService

    6. **JAX-RPC(Java API for XML-Based RPC)向JAX-WS的过渡**:在JDK 1.6之前,JAX-RPC被广泛用于构建Web服务,但在JDK 1.6中,JAX-WS逐渐取代了JAX-RPC,成为推荐的Web服务编程模型,因为它更符合WS-*标准,并且...

    MyEclipse6_5上基于JAX-WS开发Webservice(中文示例)

    在本教程中,我们将深入探讨如何在MyEclipse 6.5版本中使用JAX-WS(Java API for XML Web Services)技术开发Web服务。这是一个非常实用的指南,旨在帮助开发者快速掌握Webservice的创建、部署和测试过程,特别适合...

    JAX-WS开发部署WebService

    【JAX-WS开发部署WebService】是Web服务开发的一个重要主题,主要涉及到使用Java API for XML Web Services(JAX-WS)创建和部署基于SOAP的Web服务。JAX-WS是一种标准的、Java平台上的API,它使得开发人员能够轻松地...

    MyEclipse中jax-ws开发教程

    以上就是MyEclipse中使用JAX-WS开发Web服务的全过程,涵盖了从创建项目、编写服务接口、部署服务到创建和测试客户端的全部步骤。通过这种方式,开发者可以轻松地构建基于Java的Web服务,并与其它系统进行交互。

    webservicedemo+jax-ws

    JAX-WS使用了JDK 6自带的实现,这意味着开发者无需额外安装库就可以直接在项目中使用。readme.txt文件提供了详细的指南,包括设置、运行和测试Web服务的步骤,这对于初学者来说是非常宝贵的资源。 在Web服务开发中...

    Asynchronous Web Service Invocation with JAX-WS 2.0

    为了使用JAX-WS 2.0,开发人员需要JDK 5.0或更高版本,以及JAX-WS 2.0参考实现。文中提到的Tomcat 5.5、Sun Java System Application Server 9.0、GlassFish和Celtix都支持JAX-WS 2.0。对于其他不支持JAX-WS 2.0的...

    jdk6 开发webservice

    在JDK 6中,JAX-WS是内置的,开发者无需额外安装其他库即可使用。它支持SOAP(Simple Object Access Protocol)协议,并且可以与WSDL(Web Service Description Language)配合,使得服务的定义和调用更加规范。 2....

Global site tag (gtag.js) - Google Analytics