使用 jaxws-ri-2.2.10,根据wsdl文件生成webservice客户端:
wsimport -s src -d bin -p com.client document.xml
出现错误,错误如下:[ERROR] 无法生成 SEI, 类com.client.XX 已存在。请使用JAX-WS定制设置重命名 wsdl:portType
Exception in thread "main" com.sun.tools.ws.wscompile.AbortException at com.sun.tools.ws.wscompile.WsimportTool.generateCode(WsimportTool.java:469) at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:209) at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:183) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.sun.tools.ws.Invoker.invoke(Invoker.java:174) at com.sun.tools.ws.WsImport.main(WsImport.java:57)
原因是wsdl:portType 的名称和wsdl:operation的名称相同导致的,我的wsdl(document.xml)中:ZMM_QYZXK_SPP_CGZT和ZmmQyzxkSppCgzt去掉下划线、不区分大小写的情况下,是同名文件。
<wsdl:portType name="ZMM_QYZXK_SPP_CGZT"> <wsp:Policy> <wsp:PolicyReference URI="#IF_ZMM_QYZXK_SPP_CGZT" /> </wsp:Policy> <wsdl:operation name="ZmmQyzxkSppCgzt"> <wsp:Policy> <wsp:PolicyReference URI="#OP_ZmmQyzxkSppCgzt" /> </wsp:Policy> <wsdl:input message="tns:ZmmQyzxkSppCgzt" /> <wsdl:output message="tns:ZmmQyzxkSppCgztResponse" /> </wsdl:operation> </wsdl:portType>
解决方法使用customization进行重命名(可以重命名各种名称),重命名ZMM_QYZXK_SPP_CGZT为新名称ZMMQYZXKSPPCGZTClass:bind.xml
<bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" wsdlLocation="file:/E:/document/download/jaxws-ri-2.2.10/bin/document.xml" xmlns="http://java.sun.com/xml/ns/jaxws"> <package name="com.lantong.dpcenter.ws.erpclientCgzt"/> <!-- default settings --> <enableWrapperStyle>true</enableWrapperStyle> <enableAsyncMapping>false</enableAsyncMapping> <!-- wsdl:portType customization --> <bindings node="wsdl:definitions/wsdl:portType[@name='ZMM_QYZXK_SPP_CGZT']"> <!-- change the generated SEI class --> <class name="ZMMQYZXKSPPCGZTClass"/> <!-- you can also override the following customization settings --> <enableWrapperStyle>true</enableWrapperStyle> <enableAsyncMapping>false</enableAsyncMapping> </bindings> </bindings>
使用 -b <path> 指定 jaxws/jaxb 绑定文件或附加模式
wsimport -s src -d bin -b bind.xml -p com.client document.xml
搞定
参考
http://www.mincoder.com/article/859.shtml
相关推荐
JAX-WS可以通过WSDL文件自动生成客户端代理类。 - **JAXB(Java Architecture for XML Binding)**:与JAX-WS配合使用,负责XML数据和Java对象之间的转换。当处理XML消息时,JAXB可以将XML数据解析成Java对象,反之...
使用`wsimport`工具,开发者可以从SEI生成WSDL和客户端存根代码。 4. **客户端代理(Proxy):**JAX-WS提供了客户端API,允许开发者通过代理对象调用Web服务。这些代理对象是由`wsimport`工具生成的,它们封装了与...
4. **生成客户端代理**:使用JAX-WS工具(如wsimport)根据WSDL生成客户端调用所需的类和Stubs。 5. **服务调用**:通过客户端代理调用Web服务,传递参数,接收响应。 ### 4. JAX-WS与WSDL的关系 WSDL是描述Web...
- **服务发布与消费**: JAX-WS提供工具将SEI映射为WSDL,以及从WSDL生成客户端调用代码。 **二、JAX-WS服务端开发** 1. **创建SEI**:定义一个Java接口,标记为`@WebService`,接口中的方法对应Web服务的端点操作...
3. **生成WSDL**:使用JAX-WS工具(如`wsimport`)自动生成WSDL文件,基于SEI接口。 4. **部署服务**:将实现类和WSDL部署到应用服务器,例如Tomcat或Jetty。 5. **生成客户端代理**:客户端使用`wsimport`工具或`...
通过WSDL,JAX-WS可以自动生成客户端代理类,使得调用Web服务如同调用本地Java方法一样简单。 10. **与Java EE的集成** 在Java EE环境中,JAX-WS服务可以轻松地部署在应用服务器上,利用容器提供的事务、安全性、...
- **注解驱动**:通过在SEI类和方法上使用注解(如`@WebService`、`@WebMethod`等),可以直接在编译时生成服务代理和部署描述符。 - **基于XML的配置**:对于更复杂的场景,可以通过XML配置文件来描述服务的细节...
4. **jaxws-tools.jar**: 包含了JAX-WS相关的工具,如wsimport和wsgen,它们分别用于从WSDL生成Java源代码和服务端点,以及从Java源代码生成WSDL。 5. **sjsxp.jar**: 这是Java Simple XML Parser (JSXP)的实现,是...
【标题】"metro-jax-ws-jaxws221x.zip" 提供的是一个关于JAX-WS(Java API for XML Web Services)的开发示例,其中包含了JAX-WS 2.2.1版本的相关组件和库文件。这个压缩包是针对Java开发者设计的,用于帮助他们理解...
4. **生成WSDL**:JAX-WS会根据SEI自动生成WSDL。 5. **创建客户端**:使用`wsimport`工具或IDE生成客户端代理类,这些类可以直接调用远程Web服务。 6. **调用服务**:通过客户端代理类调用Web服务方法,传递参数,...
**JAX-WS API** Java API for XML Web Services (JAX-WS) 是Java平台上的一个标准接口,用于创建和消费Web服务。它是Sun Microsystems在2004年推出的一个重要框架,旨在简化Web服务的开发,使得Java开发者能够更...
- **服务代理生成**:通过WSDL文件,JAX-WS的wsimport工具可以生成客户端所需的Java类,这些类提供了调用Web服务的方法。 - **服务调用**:使用生成的客户端代码,可以通过服务代理类调用远程Web服务的方法。 3. ...
JAX-WS提供了`wsimport`工具,它可以从WSDL生成Java客户端代理类。运行如下命令: ```bash wsimport -keep -verbose -servicename @{serviceName} -portname @{portName} http://serverAddress/HelloService?wsdl `...
`jaxws-ri`是JAX-WS参考实现的源代码包,包含JAX-WS API的实现以及相关的工具,如`wsimport`,用于从WSDL生成客户端代码。开发者可以使用这个库来快速开发和测试JAX-WS Web服务。 **7. JAX-WS与JAX-RS比较** JAX-...
通过右键点击项目,选择“New” -> “Web Service” -> “JAX-WS Web Service”,然后按照向导步骤操作,MyEclipse会根据SEI生成相应的WSDL文件。 3. 实现SEI:为SEI创建一个实现类,实现接口中定义的方法。这样,...
3. **生成WSDL**:使用Jax-WS工具(如wsimport或JAXB)自动生成WSDL文件,描述服务的接口和消息格式。 **3. 配置Jax-WS服务** 配置Jax-WS服务可以采用以下两种主要方式: - **注解驱动**:通过在SEI和实现类上使用...
2. **WSDL(Web Services Description Language)生成**:JAX-WS可以自动生成WSDL文档,它是Web服务的接口定义,描述了服务如何被调用,包括消息格式、操作和绑定等信息。 3. **SOAP消息处理**:JAX-WS提供了...
自顶向下是从WSDL文件开始,使用wsimport工具,通过WSDL定义来生成Java代码,这种方式适用于你已经有了WSDL描述文件。自底向上则从Java类开始,通过wsgen工具,生成WSDL和相关的XSD(XML Schema)文件,适用于你已经...
- **配置web.xml**:在web.xml中,设置`<servlet>`和`<servlet-mapping>`元素,指定服务的URL和对应的Servlet类(通常为JAX-WS自动生成的服务类)。 - **部署到Tomcat**:将WAR文件复制到Tomcat的`webapps`目录下...
2. **生成WSDL**: 使用JAX-WS工具,如`wsimport`,从SEI生成WSDL文档。 3. **实现SEI**: 创建实现类,填充业务逻辑。 4. **部署服务**: 将服务打包成WAR文件,部署到应用服务器,如Tomcat、Glassfish等。 5. **...