Xsd &引用;属性组必须设置“ref name”;生成OTA CXF Web服务客户端时
我使用ApacheCXF运行时从发布的WSDL生成web服务客户端 这个WSDL是跨开放旅游组织(OTA)提供的XDS生成的,我确信它是正确的,但我在这里也做了类似的说明 我的问题是,在使用Eclipse Kepler的“创建Web服务”工具(使用CXF运行时2.7.10和java 7u71)时,CXF控制台会收到此错误消息:属性组必须设置ref nameXsd &引用;属性组必须设置“ref name”;生成OTA CXF Web服务客户端时,xsd,cxf,webservice-client,wsdl2java,Xsd,Cxf,Webservice Client,Wsdl2java,我使用ApacheCXF运行时从发布的WSDL生成web服务客户端 这个WSDL是跨开放旅游组织(OTA)提供的XDS生成的,我确信它是正确的,但我在这里也做了类似的说明 我的问题是,在使用Eclipse Kepler的“创建Web服务”工具(使用CXF运行时2.7.10和java 7u71)时,CXF控制台会收到此错误消息:属性组必须设置ref name WSDLToJava Error: java.lang.RuntimeException: org.apache.ws.common
WSDLToJava Error: java.lang.RuntimeException: org.apache.ws.commons.schema.XmlSchemaSerializer$XmlSchemaSerializerException: Attribute group must have ref name set
org.apache.cxf.tools.common.ToolException: java.lang.RuntimeException:
org.apache.ws.commons.schema.XmlSchemaSerializer$XmlSchemaSerializerException:
Attribute group must have ref name set
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:420)
at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:103)
at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113)
at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86)
at org.apache.cxf.tools.wsdlto.WSDLToJava.main(WSDLToJava.java:184)
Caused by: java.lang.RuntimeException:
org.apache.ws.commons.schema.XmlSchemaSerializer$XmlSchemaSerializerException:
Attribute group must have ref name set
at org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.addSchemas(JAXBDataBinding.java:642)
at org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:443)
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.generateTypes(WSDLToJavaContainer.java:714)
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:270)
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:164)
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:412)
... 4 more
Caused by:
org.apache.ws.commons.schema.XmlSchemaSerializer$XmlSchemaSerializerException: Attribute group must have ref name set
at org.apache.ws.commons.schema.XmlSchemaSerializer.serializeAttributeGroupRef(XmlSchemaSerializer.java:562)
at org.apache.ws.commons.schema.XmlSchemaSerializer.serializeAttributeGroup(XmlSchemaSerializer.java:523)
at org.apache.ws.commons.schema.XmlSchemaSerializer.serializeSchemaChild(XmlSchemaSerializer.java:2406)
at org.apache.ws.commons.schema.XmlSchemaSerializer.serializeSchemaElement(XmlSchemaSerializer.java:1659)
at org.apache.ws.commons.schema.XmlSchemaSerializer.serializeSchema(XmlSchemaSerializer.java:132)
at org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.addSchemas(JAXBDataBinding.java:640)
... 9 more
通过Tomcat控制台appair,出现了一个很长的stachtraces,出现了“由对等方重置连接:套接字写入错误”错误
何时部署WSDL如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
name="OTA_VehAvailRateService"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.opentravel.org/OTA/2003/05"
xmlns:ota="http://www.opentravel.org/OTA/2003/05">
<wsdl:types>
<xs:schema>
<xs:import namespace="http://www.opentravel.org/OTA/2003/05" schemaLocation="OTA_VehAvailRateRQ.xsd" />
</xs:schema>
<xs:schema>
<xs:import namespace="http://www.opentravel.org/OTA/2003/05" schemaLocation="OTA_VehAvailRateRS.xsd" />
</xs:schema>
</wsdl:types>
<wsdl:message name="OTA_VehAvailRateRequest">
<wsdl:part element="ota:OTA_VehAvailRateRQ" name="parameters"/>
</wsdl:message>
<wsdl:message name="OTA_VehAvailRateResponse">
<wsdl:part element="ota:OTA_VehAvailRateRS" name="parameters"/>
</wsdl:message>
<wsdl:portType name="OTA_VehAvailRatePortType">
<wsdl:operation name="OTA_VehAvailRateAction">
<wsdl:input message="ota:OTA_VehAvailRateRequest"/>
<wsdl:output message="ota:OTA_VehAvailRateResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="OTA_VehAvailRateSOAPBinding" type="ota:OTA_VehAvailRatePortType">
<soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="OTA_VehAvailRateAction">
<soap12:operation soapAction="OTA_VehAvailRateSoapAction" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="OTA_VehAvailRateService">
<wsdl:port name="OTA_VehAvailRatePort" binding="ota:OTA_VehAvailRateSOAPBinding">
<soap12:address location="http://172.26.0.40:85/WebServiceAmadeus/services/OTA_VehAvailRatePort"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
我使用:
/WebServiceAmadeus/WebContent/wsdl/KarveOta.wsdl
其中WebServiceAmadeus是同一工作区的项目文件夹
当然,这不是解决方案,因为只有本地主机才能工作
更新
我曾尝试过其他CXF版本(2.4.2、3.0.2等),但都存在同样的问题。
我尝试过SOAP版本1.1,但遇到了同样的问题。
从SOAPUI5.0.0,我可以部署get请求,但响应说解组错误:?这可能是XML模式中的错误。检查是否使用
元素来引用某些全局定义的属性组,如果使用,元素是否具有ref
属性。对OTA提出相同的问题。我使用的是SpringWS,对我来说,当我添加
<property name="inline" value="false"/>
在
org.springframework.xml.xsd.commons.commons-xsdschemacollection
SpringWS从OTA xsd文件生成动态wsdl时,ApacheXMLSchema核心库版本2+会导致以下异常 org.apache.ws.commons.schema.XmlSchemaException: 属性组必须设置ref name
WSDLToJava Error: java.lang.RuntimeException: org.apache.ws.commons.schema.XmlSchemaSerializer$XmlSchemaSerializerException: Attribute group must have ref name set
org.apache.cxf.tools.common.ToolException: java.lang.RuntimeException:
org.apache.ws.commons.schema.XmlSchemaSerializer$XmlSchemaSerializerException:
Attribute group must have ref name set
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:420)
at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:103)
at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113)
at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86)
at org.apache.cxf.tools.wsdlto.WSDLToJava.main(WSDLToJava.java:184)
Caused by: java.lang.RuntimeException:
org.apache.ws.commons.schema.XmlSchemaSerializer$XmlSchemaSerializerException:
Attribute group must have ref name set
at org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.addSchemas(JAXBDataBinding.java:642)
at org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:443)
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.generateTypes(WSDLToJavaContainer.java:714)
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:270)
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:164)
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:412)
... 4 more
Caused by:
org.apache.ws.commons.schema.XmlSchemaSerializer$XmlSchemaSerializerException: Attribute group must have ref name set
at org.apache.ws.commons.schema.XmlSchemaSerializer.serializeAttributeGroupRef(XmlSchemaSerializer.java:562)
at org.apache.ws.commons.schema.XmlSchemaSerializer.serializeAttributeGroup(XmlSchemaSerializer.java:523)
at org.apache.ws.commons.schema.XmlSchemaSerializer.serializeSchemaChild(XmlSchemaSerializer.java:2406)
at org.apache.ws.commons.schema.XmlSchemaSerializer.serializeSchemaElement(XmlSchemaSerializer.java:1659)
at org.apache.ws.commons.schema.XmlSchemaSerializer.serializeSchema(XmlSchemaSerializer.java:132)
at org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.addSchemas(JAXBDataBinding.java:640)
... 9 more
将spring-xml.2.0.5.RELEASE(max)与XmlSchema.1.4.7结合使用将解决wsdl生成问题,即使使用inline value=“true”
org.springframework.ws
SpringXML
2.0.5.1发布
org.apache.ws.commons.schema
XmlSchema
1.4.7
问题来自OTA标准的XSD文件,对于某些版本,没有定义名称空间和targetnamespace
例如:
- 对于2006a版本,一切正常
- 对于2005b verson,缺少命名空间和targetnamespace
我认为它是一些定义中的错误,所以我添加了缺失的数据,保持补丁…< /P>
库XmlSchema是一个旧库,它与我的项目中的其他库冲突。是的,确实如此。但如果我需要内联,该怎么办呢?模式中有很多attributeGroup元素,但它们都有名称或引用..我检查了所有引用,有名称的元素
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-xml</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.ws.commons.schema</groupId>
<artifactId>XmlSchema</artifactId>
<version>1.4.7</version>
</dependency>