`

java wsdl 中不显示参数属性类型的问题解决方案

阅读更多
CXF3.0.1解决方案:
配合spring方式
<jaxws:endpoint id="receiveUMSMessageService" implementor="com.sw.extInterface.webservice.service.impl.ReceiveUMSMessageServiceImpl"
		address="/ReceiveUMSMessageService" implementorClass="com.sw.extInterface.webservice.service.ReceiveUMSMessageService" />


======================= old =====================
最近采用CXF写了webservice接口,但是生成的wsdl却没有参数。

首先介绍一下JWS的注解:
Java Web Service (JWS) 注释类型是 Web Service 的核心之一。

(一)类级别

@javax.jws.WebService(targetNamespace = "", name = "",serviceName = "")

targetNamespace :生成的 WSDL 中使用的名称空间
name:Web Service 的名称,映射到 WSDL 文件中的 <wsdl:portType> 元素
serviceName: Web Service 的服务名,映射到 WSDL 文件<wsdl:service>   元素。


@javax.jws.soap.SOAPBinding(parameterStyle = javax.jws.soap.SOAPBinding.ParameterStyle.BARE)

用于指定 Web Service 到 SOAP 消息协议的映射。

parameterStyle :确定方法参数是否表示整个消息正文,或者参数是否是包装在以操作命名的顶层元素中的元素。默认值:javax.jws.soap.SOAPBinding.ParameterStyle.WRAPPED

(二)方法级别

@javax.jws.WebResult(name = "", targetNamespace = "", partName = "")

name:指定生成的 WSDL 中的操作结果的名称, 默认名称“return”。

@javax.jws.WebMethod(operationName="")

operationName: 指定方法公开的公共操作名,映射到 WSDL 文件中的 <wsdl:operation> 元素。没有这个属性的话,操作的公共名称将与方法名相同。

@javax.jws.WebParam(name="",targetNamespace="")

name: 指定输入参数名,而不是该参数的Java 名称“input”。

注释描述部分转载至:http://suky.iteye.com/blog/692279

========================================

那么为什么参数类型不在wsdl上显示呢?

原因就在targetNamespace上。
增加webservice interface和webservice impl的@webservice注解的targetNamespace属性。
同时接口方法参数前@WebParam注解。
接口代码,实现类就不展示了
@WebService(targetNamespace="http://ucp.xxx.com")
public interface IMsgBusService {

	/**
	 * 接收上行数据,DB数据存储
	 * @param username 用户
	 * @param password 密码
	 * @param msgsObj 消息对象
	 * @return 消息状态
	 */
	@WebMethod
	Response showMsg(@WebParam(name = "username") String username,
			@WebParam(name = "password") String password,
			@WebParam(name = "msgsObj") MultiMessages msgsObj);

}



注意:接口与实现类的targetNamespace属性的值必须一致。

<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.service.bus.ucp.xxx.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:ns1="http://service.bus.ucp.xxx.com/" name="MsgBusServiceImpl" targetNamespace="http://impl.service.bus.ucp.xxx.com/">
  <wsdl:import location="http://localhost/ucp/webservice/msgBusService?wsdl=IMsgBusService.wsdl" namespace="http://service.bus.ucp.xxx.com/">
    </wsdl:import>
  <wsdl:binding name="MsgBusServiceImplSoapBinding" type="ns1:IMsgBusService">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="showMsg">
      <soap:operation soapAction="" style="document"/>
      <wsdl:input name="showMsg">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="showMsgResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="MsgBusServiceImpl">
    <wsdl:port binding="tns:MsgBusServiceImplSoapBinding" name="MsgBusServiceImplPort">
      <soap:address location="http://localhost/ucp/webservice/msgBusService"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>



<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://ucp.xxx.com" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="MsgBusServiceImpl" targetNamespace="http://ucp.xxx.com">
  <wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ucp.xxx.com" elementFormDefault="unqualified" targetNamespace="http://ucp.xxx.com" version="1.0">

  <xs:element name="showMsg" type="tns:showMsg"/>

  <xs:element name="showMsgResponse" type="tns:showMsgResponse"/>

  <xs:complexType name="showMsg">
    <xs:sequence>
      <xs:element minOccurs="0" name="username" type="xs:string"/>
      <xs:element minOccurs="0" name="password" type="xs:string"/>
      <xs:element minOccurs="0" name="msgsObj" type="tns:multiMessages"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="multiMessages">
    <xs:sequence>
      <xs:element minOccurs="0" name="accessType" type="xs:string"/>
      <xs:element minOccurs="0" name="id" type="xs:string"/>
      <xs:element name="msgCount" type="xs:int"/>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="msgList" nillable="true" type="tns:multiMessage"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="multiMessage">
    <xs:sequence>
      <xs:element minOccurs="0" name="content" type="xs:string"/>
      <xs:element minOccurs="0" name="description" type="xs:string"/>

      <!-- ... ... -->

      <xs:element minOccurs="0" name="destAgentId" type="xs:string"/>
      <xs:element minOccurs="0" name="destination" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="showMsgResponse">
    <xs:sequence>
      <xs:element minOccurs="0" name="return" type="tns:response"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="response">
    <xs:sequence>
      <xs:element minOccurs="0" name="message" type="xs:string"/>
      <xs:element minOccurs="0" name="status" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

</xs:schema>
  </wsdl:types>
  <wsdl:message name="showMsg">
    <wsdl:part element="tns:showMsg" name="parameters">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="showMsgResponse">
    <wsdl:part element="tns:showMsgResponse" name="parameters">
    </wsdl:part>
  </wsdl:message>
  <wsdl:portType name="IMsgBusService">
    <wsdl:operation name="showMsg">
      <wsdl:input message="tns:showMsg" name="showMsg">
    </wsdl:input>
      <wsdl:output message="tns:showMsgResponse" name="showMsgResponse">
    </wsdl:output>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="MsgBusServiceImplSoapBinding" type="tns:IMsgBusService">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="showMsg">
      <soap:operation soapAction="" style="document"/>
      <wsdl:input name="showMsg">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="showMsgResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="MsgBusServiceImpl">
    <wsdl:port binding="tns:MsgBusServiceImplSoapBinding" name="IMsgBusService">
      <soap:address location="http://localhost/ucp/webservice/msgBusService"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>
分享到:
评论

相关推荐

    WSDL中描述集合对象泛型的解决办法

    - **文档编写**:在项目文档中明确记录此类问题及其解决方案,有助于团队成员更好地理解和应用。 - **配置文件调整**:根据实际情况调整服务器配置文件(如server-config.wsdd),确保所有组件能够协同工作。 #### ...

    Xfire调用webservice无法传递参数问题

    通过逐步排查上述可能出现的问题,通常可以找出问题的根源并采取相应的解决方案。在实际开发中,保持良好的编程习惯,及时记录和分析错误信息,以及充分利用调试工具,都能帮助我们有效地解决此类问题。

    调用 java webservice 的问题

    调用Java WebService的问题在IT领域中颇为常见,尤其是在跨平台、跨语言的环境中,如C#调用Java WebService。以下将详细解析这一过程中的关键知识点,包括WebService的架构原理、工具选择(如Axis2)、数据类型转换...

    c#调用Java webService的专题(一)

    需要注意的是,由于.NET和Java之间可能存在类型不匹配的问题,因此在传递参数时可能需要进行类型转换。此外,处理异常和错误也是必不可少的,尤其是网络通信相关的异常。 在实际开发中,你可能还需要关注性能优化、...

    java面试题 doc

    5. Java中的多态性体现在类的实例可以被声明为父类类型,从而调用子类继承的公共方法。继承则是类之间的“is-a”关系,子类继承父类的属性和方法。 6. 抽象类可以有部分实现,而接口仅定义方法签名,不包含实现。...

    java调用.net写的Webservice.pdf

    在.NET中,可以通过在Web服务类上添加`[SoapDocumentService(RoutingStyle=SoapServiceRoutingStyle.RequestElement)]`属性来解决此问题。 3. **WSDL(Web Service Description Language)的作用**: WSDL是一种...

    java高级软件工程师面试题及答案

    最后,设计模式是软件开发中解决特定问题的一般性解决方案。MVC模式是一种常用的架构模式,用于将业务逻辑、用户界面和数据访问分离开来。WebService是实现不同系统之间通信的一种方式,涉及多种技术标准,包括SOAP...

    错误:下载WSDL或模式文件时出现问题

    在【Error-Problem-with-downloading-WSDL-or-schema-file.pdf】这份文档中,可能详细记录了解决上述问题的具体步骤和案例分析,包括可能的错误信息、调试技巧以及解决方案。通过阅读这份文档,你可以找到针对你当前...

    Java Development with Ant.pdf

    - 部署过程中可能出现的问题及解决方案 8. **综合案例分析** - 结合前几章知识点的实际应用案例 - 实现一个完整的Java项目的构建、测试、打包与部署 - 总结经验教训与最佳实践 9. **Ant在开发项目中的应用** ...

    WebService中使用自定义类的五种解决方法

    本文将详细讲解在WebService中使用自定义类的五种解决方法。 1. **实现Serializable接口**: Java中,我们可以让自定义类实现`java.io.Serializable`接口,这使得Java对象可以被序列化为字节流,从而可以通过网络...

    Java 最新 面试 全集

    38. **抽象方法特性**:抽象方法不能是static、native、synchronized。 39. **接口继承**:接口可以继承接口,抽象类可以实现接口,实体类可以继承抽象类。 40. **线程启动**:启动线程用start(),run()直接调用...

    Java面试宝典-经典

    26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 ...

    JAVA面试题(中).pdf

    尽管FastCGI技术可以解决CGI的部分性能问题,但Servlet仍然在很多基于Java的Web应用中得到广泛使用。 Servlet接口中定义了几个与生命周期相关的重要方法。包括init()方法用于初始化Servlet,service()方法是核心...

    225道Java面试题 学会了Java面试随你问.docx

    14. **设计模式与UML**:设计模式是软件开发中解决问题的通用可复用解决方案,如工厂模式。UML是统一建模语言,用于系统建模。 15. **字符串截取**:处理Unicode字符时避免截断半字符。 16. **Oracle大数据量分页*...

    java调用.net写的Webservice[归类].pdf

    本文将详细探讨如何使用Java的Axis1.x库来调用.NET WebService,并介绍在此过程中可能遇到的问题及解决方案。 首先,让我们了解如何使用Axis1.x调用Web服务。在Java中,你需要创建一个`Service`对象,然后通过这个...

    java面试宝典

    199、在ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有是三层嵌套方法。 47 200、xml有哪些解析技术?区别是什么? 48 201、你在项目中用到了xml技术的哪些方面?如何实现的? 48 202、用jdom解析xml文件时...

    delphi调用webservice总结(c#,delphi,java).doc

    wsdl`不可遗漏。 - 示例地址:`http://127.0.0.1/WebService/WebServiceCall.asmx?wsdl` ##### 2. 设置THTTPRIO控件属性 - THTTPRIO控件是Delphi中用于发送HTTP请求的关键组件之一。 - 将WSDL文件地址赋值给`URL`...

Global site tag (gtag.js) - Google Analytics