如何使用Apache CXF从Mikogo WSDL处理无模式响应类型

时间:2014-01-27 11:51:01

标签: web-services soap wsdl cxf

我使用Apache CXF的wsdl2java为Mikogo Web界面创建java存根。

创建失败,并显示以下消息:

The part does not have a type defined. Every part must specify a type from
some type system. The type can be specified using the built in element or type
attributes or may be specified using an extension attribute.

WSDL外观定义了以下消息:

<wsdl:message name="methodHttpPostOut">
  <wsdl:part name="Body"/>
</wsdl:message>

<http:address location=... />

这看起来像非SOAP和“无架构”响应类型,严格的XSD类型定义没有涵盖。

  1. 我不确定,如果CXF确实提供了这种“无模式”的定义。
  2. http://schemas.xmlsoap.org/wsdl/http/ 的目的是什么?我可以使用这种与Apache CXF的接口
  3. 任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您得到此错误,因为您的部件没有定义类型。您可以使用这些消息输入属性:

  • 元素。引用使用QName的XSD元素。
  • 类型。引用使用QName的XSD simpleType或complexType。

这是complexType的简单示例:

<definitions .... >
    <types>
        <schema .... >

           <element name="Invoice" type="tns:InvoiceType"/>
           <complexType name="InvoiceType">
               <all>
                   <element name="id" type="string"/>
               </all>
           </complexType>
        </schema>
    </types>

    <message name="PO">
        <part name="invoice" element="tns:Invoice"/>
    </message>
</definitions> 

  1. 我认为CFX并不支持&#34; shema-less&#34;定义
  2. In this link您可以找到支持的命名空间。此命名空间提供URI属性。
  3. 这里有一些关于http命名空间和wsdl消息的链接:

答案 1 :(得分:1)

我按照以下步骤使用here中的 trang.jar 成功地对XSD进行了逆向工程:

  1. 使用SOAP UI作为客户端连接到WSDL
  2. 从SOAP UI发出有效请求
  3. 将生成的XML响应保存到文件
  4. 正在运行 java -jar trang.jar response-sample.xml guessed.xsd
  5. trang生成(在我的情况下)两个XSD文件,我手动修复(类型并不总是正确猜测等)。
  6. 需要将XSD复制到WSDL中
  7. 使用wsdl2java
  8. 重新创建java存根

    这种方法远非架构,但它在没有过多挖掘XML / WSDL编写的情况下帮助了我。