CXF自动生成wsdl

时间:2009-08-26 13:23:20

标签: java web-services wsdl cxf

我正在使用CXF-WS 2.2.1开发webservices。我之前已经开发并测试了这些服务,但是现在生成的wsdl与之前的wsdl不同,这里是旧的

<?xml version="1.0" ?> 
- <wsdl:definitions name="ICodeTableServiceService" targetNamespace="http://codetable.service.esps.cvs.com/" xmlns:ns1="http://cxf.apache.org/bindings/xformat" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://codetable.service.esps.cvs.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <wsdl:types>
- <xsd:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://codetable.service.esps.cvs.com/" xmlns:tns="http://codetable.service.esps.cvs.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="ESPSException" type="tns:ESPSException" /> 
- <xsd:complexType name="ESPSException">
- <xsd:sequence>
  <xsd:element name="logged" nillable="true" type="xsd:boolean" /> 
  <xsd:element name="priority" nillable="true" type="xsd:int" /> 
  </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="getCodeTableDataMultiple" type="tns:getCodeTableDataMultiple" /> 
- <xsd:complexType name="getCodeTableDataMultiple">
- <xsd:sequence>
  <xsd:element minOccurs="0" name="codeTypeName" type="xsd:string" /> 
  </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="getCodeTableDataMultipleResponse" type="tns:getCodeTableDataMultipleResponse" /> 

而旧的就像

<?xml version="1.0" encoding="UTF-8" ?> 
- <wsdl:definitions name="ICodeTableServiceService" targetNamespace="http://codetable.service.esps.cvs.com/" xmlns:ns1="http://cxf.apache.org/bindings/xformat" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://codetable.service.esps.cvs.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <wsdl:types>
- <xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://codetable.service.esps.cvs.com/" xmlns:tns="http://codetable.service.esps.cvs.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="sayHello" nillable="true" type="tns:sayHello" /> 
  <xs:element name="sayHelloResponse" nillable="true" type="tns:sayHelloResponse" /> 
  <xs:element name="ESPSException" type="tns:ESPSException" /> 
- <xs:complexType name="ESPSException">
- <xs:sequence>
  <xs:element name="logged" nillable="true" type="xs:boolean" /> 
  <xs:element name="priority" nillable="true" type="xs:int" /> 
  </xs:sequence>
  </xs:complexType>
  <xs:element name="getCodeTableData" nillable="true" type="tns:getCodeTableData" /> 
  <xs:element name="getCodeTableDataResponse" nillable="true" type="tns:getCodeTableDataResponse" /> 

正如您所看到的,wsdl与第一行不同。配置或项目中使用的jar没有变化。谁能帮助我解决为什么会发生这样的事情。我很快就会感激,因为这必须在后天进行建设。

提前致谢 Adhir Aima

1 个答案:

答案 0 :(得分:3)

很多事情可能导致其中一些。编码=“UTF-8”对我来说很奇怪。不知道是什么原因会导致那个人出现不同的解析器。也许不同的JDK?我不太确定。

其余的更改看起来就像按照架构中的元素/类型和属性排序的顺序排序差异。在这两种情况下,答案都是一样的。这些东西存储在内存中的HashMaps中。 HashMaps的排序不能保证,并且在各种情况下很容易出现差异。不同的解析器(见上文)可以以不同的顺序调用put(..)来影响事物。不同的JRE可以不同的顺序排序。此外,从getClass()。getMethods()返回的Method []的顺序可能有效(例如,IBM JDK以与Sun JDK不同的顺序返回它们),因为CXF会以不同的顺序内省事物。 。不同的编译器可以以不同的顺序将方法放在.class文件中。等....