`
schy_hqh
  • 浏览: 558274 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

使用JAX-WS的maven插件发布webservice

 
阅读更多

1.引入插件过程中,提示miss jar的问题,换中心仓库的地址解决了

settings.xml中将中心仓库的地址改为http://uk.maven.org/maven2

2.基于契约优先的方式,wsdl中的schema如果引用外部的xsd文件,客户端使用wsimport导出会出现问题,提示找不到xsd文件

将xsd中定义的元素拷贝到wsdl中,不要单独定义

 

schema

 

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ws.student.hqh.com"
	xmlns:tns="http://ws.student.hqh.com" elementFormDefault="qualified">
	
	<xsd:element name="getStudent" type="tns:getStudent" />
	<xsd:element name="getStudentResponse" type="tns:getStudentResponse" />
	<xsd:element name="list" type="tns:list" />
	<xsd:element name="listResponse" type="tns:listResponse" />
	<xsd:element name="listReward" type="tns:listReward" />
	<xsd:element name="listRewardResponse" type="tns:listRewardResponse" />

	<xsd:complexType name="student">
		<xsd:sequence>
			<xsd:element name="id" type="xsd:int" />
			<xsd:element name="name" type="xsd:string" />
			<xsd:element name="sex" type="xsd:string" />
			<xsd:element name="age" type="xsd:int" />
			<xsd:element name="number" type="xsd:string" />
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="reward">
		<xsd:sequence>
			<xsd:element name="id" type="xsd:int" />
			<xsd:element name="year" type="xsd:string" />
			<xsd:element name="rewardInfo" type="xsd:string" />
			<xsd:element name="detail" type="xsd:string" />
			<xsd:element name="student" type="tns:student" />
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="getStudent">
		<xsd:sequence>
			<xsd:element name="number" type="xsd:string" />
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="getStudentResponse">
		<xsd:sequence>
			<xsd:element name="stu" type="tns:student" />
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="list">
		<xsd:sequence />
	</xsd:complexType>

	<xsd:complexType name="listResponse">
		<xsd:sequence minOccurs="1" maxOccurs="unbounded">
			<xsd:element name="students" type="tns:student" />
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="listReward">
		<xsd:sequence>
			<xsd:element name="number" type="xsd:string" />
			<xsd:element name="date" type="xsd:date" />
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="listRewardResponse">
		<xsd:sequence minOccurs="1" maxOccurs="unbounded">
			<xsd:element name="rewards" type="tns:reward" />
		</xsd:sequence>
	</xsd:complexType>
</xsd:schema>

 

 

wsdl

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
	xmlns:tns="http://ws.student.hqh.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="StudentWSService"
	targetNamespace="http://ws.student.hqh.com">

	<!-- 指定schema -->
	<wsdl:types>
		<xsd:schema targetNamespace="http://ws.student.hqh.com">
			<!-- <xsd:import schemaLocation="student.xsd" namespace="http://ws.student.hqh.com"/> -->
			<xsd:element name="getStudent" type="tns:getStudent" />
			<xsd:element name="getStudentResponse" type="tns:getStudentResponse" />
			<xsd:element name="list" type="tns:list" />
			<xsd:element name="listResponse" type="tns:listResponse" />
			<xsd:element name="listReward" type="tns:listReward" />
			<xsd:element name="listRewardResponse" type="tns:listRewardResponse" />

			<xsd:complexType name="student">
				<xsd:sequence>
					<xsd:element name="id" type="xsd:int" />
					<xsd:element name="name" type="xsd:string" />
					<xsd:element name="sex" type="xsd:string" />
					<xsd:element name="age" type="xsd:int" />
					<xsd:element name="number" type="xsd:string" />
				</xsd:sequence>
			</xsd:complexType>

			<xsd:complexType name="reward">
				<xsd:sequence>
					<xsd:element name="id" type="xsd:int" />
					<xsd:element name="year" type="xsd:string" />
					<xsd:element name="rewardInfo" type="xsd:string" />
					<xsd:element name="detail" type="xsd:string" />
					<xsd:element name="student" type="tns:student" />
				</xsd:sequence>
			</xsd:complexType>

			<xsd:complexType name="getStudent">
				<xsd:sequence>
					<xsd:element name="number" type="xsd:string" />
				</xsd:sequence>
			</xsd:complexType>

			<xsd:complexType name="getStudentResponse">
				<xsd:sequence>
					<xsd:element name="stu" type="tns:student" />
				</xsd:sequence>
			</xsd:complexType>

			<xsd:complexType name="list">
				<xsd:sequence />
			</xsd:complexType>

			<xsd:complexType name="listResponse">
				<xsd:sequence minOccurs="1" maxOccurs="unbounded">
					<xsd:element name="students" type="tns:student" />
				</xsd:sequence>
			</xsd:complexType>

			<xsd:complexType name="listReward">
				<xsd:sequence>
					<xsd:element name="number" type="xsd:string" />
					<xsd:element name="year" type="xsd:string" />
				</xsd:sequence>
			</xsd:complexType>

			<xsd:complexType name="listRewardResponse">
				<xsd:sequence minOccurs="1" maxOccurs="unbounded">
					<xsd:element name="rewards" type="tns:reward" />
				</xsd:sequence>
			</xsd:complexType>
		</xsd:schema>
	</wsdl:types>

	<!-- 指定方法 -->
	<wsdl:message name="getStudent">
		<wsdl:part element="tns:getStudent" name="parameters" />
	</wsdl:message>
	<wsdl:message name="getStudentResponse">
		<wsdl:part element="tns:getStudentResponse" name="parameters" />
	</wsdl:message>
	<wsdl:message name="list">
		<wsdl:part element="tns:list" name="parameters" />
	</wsdl:message>
	<wsdl:message name="listResponse">
		<wsdl:part element="tns:listResponse" name="parameters" />
	</wsdl:message>
	<wsdl:message name="listReward">
		<wsdl:part element="tns:listReward" name="parameters" />
	</wsdl:message>
	<wsdl:message name="listRewardResponse">
		<wsdl:part element="tns:listRewardResponse" name="parameters" />
	</wsdl:message>

	<!-- 指定接口 -->
	<wsdl:portType name="IStudentWSService">
		<wsdl:operation name="getStudent">
			<wsdl:input message="tns:getStudent" />
			<wsdl:output message="tns:getStudentResponse" />
		</wsdl:operation>
		<wsdl:operation name="list">
			<wsdl:input message="tns:list" />
			<wsdl:output message="tns:listResponse" />
		</wsdl:operation>
		<wsdl:operation name="listReward">
			<wsdl:input message="tns:listReward" />
			<wsdl:output message="tns:listRewardResponse" />
		</wsdl:operation>
	</wsdl:portType>

	<!-- 指定接口中的方法的参数编码格式 -->
	<wsdl:binding name="studentSOAP" type="tns:IStudentWSService">
		<soap:binding style="document"
			transport="http://schemas.xmlsoap.org/soap/http" />
		<wsdl:operation name="getStudent">
			<wsdl:input>
				<soap:body use="literal" />
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" />
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="list">
			<wsdl:input>
				<soap:body use="literal" />
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" />
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="listReward">
			<wsdl:input>
				<soap:body use="literal" />
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" />
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>

	<!-- 指定服务名称、端口、地址 -->
	<wsdl:service name="StudentWSService">
		<wsdl:port binding="tns:studentSOAP" name="studentServicePort">
			<soap:address location="http://localhost:8080/stu/ws/" />
		</wsdl:port>
	</wsdl:service>
</wsdl:definitions>

 安装插件

将插件的执行阶段绑定到了compile期间,只要项目执行编译命令,就会到指定位置寻找wsdl文件并将其转换为java文件。只拷贝接口,然后删除接口中的多余项(方法参数上指定的class)
<!-- jaxws插件 -->
<plugin>
	  <groupId>org.codehaus.mojo</groupId>
	  <artifactId>jaxws-maven-plugin</artifactId>
	  <version>1.9</version>
	  <configuration>
	  	<wsdlDirectory>src/main/resources/META-INF/wsdl</wsdlDirectory>
	  	<wsdlFiles>
	  		<wsdlFile>student.wsdl</wsdlFile>
	  	</wsdlFiles>
	  </configuration>
	  <executions>
	  	<execution>
	  		<phase>compile</phase>
	  		<goals>
	  			<goal>wsimport</goal>
	  		</goals>
	  	</execution>
	  </executions>
</plugin>

 

 

接口

package com.hqh.student.ws;

import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;

import com.hqh.student.model.Reward;
import com.hqh.student.model.Student;


/**
 * This class was generated by the JAX-WS RI.
 * JAX-WS RI 2.1.3-b02-
 * Generated source version: 2.1
 * 
 */
@WebService(name = "IStudentWSService", targetNamespace = "http://ws.student.hqh.com")
public interface IStudentWSService {


    /**
     * 
     * @param number
     * @return
     *     returns com.hqh.student.ws.Student
     */
    @WebMethod
    @WebResult(name = "stu", targetNamespace = "")
    @RequestWrapper(localName = "getStudent", targetNamespace = "http://ws.student.hqh.com")
    @ResponseWrapper(localName = "getStudentResponse", targetNamespace = "http://ws.student.hqh.com")
    public Student getStudent(
        @WebParam(name = "number", targetNamespace = "")
        String number);

    /**
     * 
     * @return
     *     returns java.util.List<com.hqh.student.ws.Student>
     */
    @WebMethod
    @WebResult(name = "students", targetNamespace = "")
    @RequestWrapper(localName = "list", targetNamespace = "http://ws.student.hqh.com")
    @ResponseWrapper(localName = "listResponse", targetNamespace = "http://ws.student.hqh.com")
    public List<Student> list();

    /**
     * 
     * @param year
     * @param number
     * @return
     *     returns java.util.List<com.hqh.student.ws.Reward>
     */
    @WebMethod
    @WebResult(name = "rewards", targetNamespace = "")
    @RequestWrapper(localName = "listReward", targetNamespace = "http://ws.student.hqh.com")
    @ResponseWrapper(localName = "listRewardResponse", targetNamespace = "http://ws.student.hqh.com")
    public List<Reward> listReward(
        @WebParam(name = "number", targetNamespace = "")
        String number,
        @WebParam(name = "year", targetNamespace = "")
        String year);

}

 

实现类

 

package com.hqh.student.ws;

import java.util.List;

import javax.jws.WebService;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.hqh.student.model.Reward;
import com.hqh.student.model.Student;
import com.hqh.student.service.StudentService;


@WebService(endpointInterface="com.hqh.student.ws.IStudentWSService",
			serviceName="StudentWSService",
			portName="studentServicePort",
			targetNamespace="http://ws.student.hqh.com",
			wsdlLocation="META-INF/wsdl/student.wsdl")
public class StudentWSServiceImpl implements IStudentWSService{
	private static final BeanFactory factory = new ClassPathXmlApplicationContext("beans.xml");
	public StudentWSServiceImpl() {
		if(studentService==null) {
			studentService = factory.getBean(StudentService.class);
		}
	}
	
	private StudentService studentService;
	
	@Override
	public Student getStudent(String number) {
		return studentService.getStudent(number);
	}

	@Override
	public List<Student> list() {
		return studentService.list();
	}

	@Override
	public List<Reward> listReward(String number, String year) {
		return studentService.listReward(number, year);
	}

}

 

开启服务

 

package com.hqh.student.ws;

import javax.xml.ws.Endpoint;

public class MyLocalServer {
	public static void main(String[] args) {
		Endpoint.publish("http://localhost:8080/stu/ws", new StudentWSServiceImpl());
	}
}

 

客户端模块

同样引入jaxws插件,绑定到compile期间,根据指定的url地址将wsdl转换为java文件

<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.hqh.student</groupId>
	<artifactId>student-client</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>student-client</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<!-- jaxws插件 -->
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>jaxws-maven-plugin</artifactId>
				<version>1.9</version>
				<configuration>
					<wsdlUrls>
						<wsdlUrl>http://localhost:8080/stu/ws?wsdl</wsdlUrl>
					</wsdlUrls>
				</configuration>
				<executions>
					<execution>
						<phase>compile</phase>
						<goals>
							<goal>wsimport</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

 执行maven:compile命令,将转换后的文件拷贝到src目录下,新建测试类

 

package com.hqh.ws.test;

import java.util.List;

import javax.xml.datatype.XMLGregorianCalendar;

import org.junit.Test;

import com.hqh.student.ws.IStudentWSService;
import com.hqh.student.ws.Reward;
import com.hqh.student.ws.Student;
import com.hqh.student.ws.StudentWSService;

public class TestStudent {
	IStudentWSService iservice = new StudentWSService().getStudentServicePort();
	@Test
	public void testGetStudent() {
		Student stu = iservice.getStudent("20130001");
		System.out.println(stu.getName());
	}
	
	@Test
	public void testList() {
		List<Student> students = iservice.list();
		for(Student stu : students) {
			System.out.println(stu.getName()+","+stu.getSex()+","+stu.getNumber());
		}
	}
	
	@Test
	public void listReward() {
		List<Reward> rewards = iservice.listReward("20130002", "2010");
		for(Reward r : rewards)
			 System.out.println(r.getId()+","+r.getRewardInfo()+","+r.getDetail()+","+r.getStudent().getName());
	}
}

 

分享到:
评论

相关推荐

    webservice之jax-ws

    开发者可以使用诸如Apache CXF、Metro等开源框架来支持JAX-WS的开发,这些框架提供了更多的功能,如WS-Security、WS-Policy等扩展,同时简化了开发过程。 8. **示例** 在提供的链接...

    metro-jax-ws-jaxws221x.zip

    【标题】"metro-jax-ws-jaxws221x.zip" 提供的是一个关于JAX-WS(Java API for XML Web Services)的开发示例,其中包含了JAX-WS 2.2.1版本的相关组件和库文件。这个压缩包是针对Java开发者设计的,用于帮助他们理解...

    JAX-WS + Spring 实现webService示例.docx

    在本文中,我们将深入探讨如何使用JAX-WS(Java API for XML Web Services)与Spring框架集成来实现一个Web服务示例。这个示例将帮助我们理解如何在Spring环境中创建、配置和部署JAX-WS服务,同时利用Spring的依赖...

    java WebService Jax-WS创建

    【Java WebService Jax-WS 创建】是Java中创建Web服务的一种常见方式,主要用于构建基于SOAP(Simple Object Access Protocol)的Web服务。JAX-WS(Java API for XML Web Services)是Java EE 5及更高版本中提供的...

    JAX-WS发布webservice例子

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

    jax-ws jax-rs 分别创建soap和restful类型的webservice

    在提供的文件中,"jax-ws-webService创建soap类型的webservice.docx"应该包含了详细的JAX-WS SOAP Web服务创建过程,而"使用jax-rs创建restful类型的webservice接口.docx"则详细阐述了JAX-RS RESTful Web服务的实现...

    MyEclipse6.5上基于JAX-WS开发Webservice

    总结:本文主要介绍了如何在 MyEclipse 6.5 中使用 JAX-WS 框架创建和部署一个简单的 Web 服务项目,包括创建 Web Service Project、编写服务类、使用 Web Service Explorer 进行测试,以及处理可能出现的问题。...

    myeclipse6.5上基于JAX-WS开发Webservice(中文示例).doc

    此项目类型支持 Maven 集成,允许用户构建符合 Java EE 5 规范的项目,这为 JAX-WS 的使用提供了基础。 3. 创建 Web Service: 在 MyEclipse 中,创建 Web Service 需要遵循以下步骤: - 新建 Web Service Project...

    上传一个基于Jax-ws的WebService

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

    jax-ws与spring整合jar包下载

    3. 配置Web服务:然后,使用JAX-WS的注解(如`@WebService`)来标记服务接口和实现类,并在Spring配置文件中声明一个`JaxWsServerFactoryBean`,指定服务接口和端点地址,例如: ```xml &lt;bean id="webService...

    JAX-WS.zip

    1. **确认JAX-WS库的版本**:确保你使用的是与应用服务器兼容的JAX-WS版本。在这个例子中,"JAX-WS 2.2 完整jar包"可能包含了所有必要的组件,包括`...

    JAX-WS_Java API for XML Web Services

    JAX-WS是Java EE的一部分,但也可以在Java SE环境中使用。 ### 1. JAX-WS概述 JAX-WS取代了早期的JAX-RPC(Java API for XML-based Remote Procedure Calls),它提供了更现代、更面向对象的API,与WSDL(Web ...

    jaxws-rt 2.1.4 jar java webservice依赖包

    maven 下载jaxws-rt 2.1.4 jar 失败了 其中包含包 com.sun.org.apache.xml.internal resolver 20050927 com.sun.xml.bind jaxb-impl 2.1.7 com.sun.xml.messaging.saaj saaj-impl 1.3.1 ...javax.xml.ws jaxws-api 2.1 ...

    jaxws-ri2.1

    1. **API文档**:详细解释了JAX-WS 2.1的各种类、接口和方法,是开发者理解和使用JAX-WS的重要参考资料。 2. **示例代码**:提供了一些示例应用或测试用例,帮助开发者了解如何创建、调用和部署Web服务。 3. **库...

    maven-spring-mybatis-web+webservice

    4. **Web服务配置**:如果项目包含Web服务,需要在Spring配置中设置WebServiceTemplate或配置JAX-WS相关组件。 5. **Spring MVC配置**:创建DispatcherServlet的配置,定义URL映射、视图解析器和处理器映射。 6. **...

    TestMart:TestMart Java JAX-WS (SOAP webservice) web 应用程序

    Java JAX-WS 提供了一种高效且灵活的方式来创建和使用Web服务。它包括以下几个核心组件: 1. **Service Endpoint Interface (SEI)**:定义服务的公共接口,这是客户端与服务交互的起点。 2. **WSDL (Web Services ...

    maven-spring-mybatis-webservice整合

    在本项目中,可能是通过JAX-WS或者CXF等实现。开发者可以创建SOAP(Simple Object Access Protocol)服务,对外提供API,允许其他系统调用,实现跨平台的数据交换。Spring框架也提供了对WebService的支持,可以方便...

    cxf 参考手册cxf 参考手册

    本参考手册主要关注 SOAP 服务的开发,涵盖了使用 JAX-WS 注解从 Java 创建服务、从 WSDL 生成服务,以及 JAX-WS 提供者和服务发布等关键点。 1. **JAX-WS 注解服务从 Java 开发** JAX-WS 提供了一系列注解,允许...

    JAVA的WebService支持-CXF

    JAX-WS(Java API for XML Web Services)是Java平台中定义WebService的一组标准,它是对早期JAX-RPC的改进和发展。JAX-WS在JDK 1.6中成为标准的一部分,其版本号为2.1。JAX-WS的一个重要特点是支持更为现代的WS-I...

    maven项目 cxf webservice

    3. **定义Web服务接口**:使用Java编程语言定义Web服务的接口,这些接口通常继承自JAX-WS或JAX-RS的接口,如`javax.jws.WebService`或`javax.ws.rs.GET`。 4. **实现Web服务**:创建接口的实现类,实现服务的具体...

Global site tag (gtag.js) - Google Analytics