当前位置: 首页 > 知识库问答 >
问题:

当生成OTA CXF Web服务客户端时,“属性组必须具有引用名称集”

呼延博易
2023-03-14

我正在使用Apache CXF运行时从已发布的WSDL生成Web服务客户端

这个WSDL是通过OpenTravelOrg(OTA)提供的XDS生成的,我确信它是正确的,但我在这里也同样如此。

我的问题是,当使用 Eclipse Kepler 的“创建 Web 服务”工具(使用 CXF 运行时 2.7.10 和 java 7u71)时,我通过 CXF 控制台收到此错误消息: 属性组必须设置引用名称

    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,出现了一个很长的堆栈,并带有“连接被对等体重置:套接字写入错误”错误

要部署的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>

更新:

我不认为这是架构定义的原因,因为:

  • 该架构由OTA(旅行经纪人网络服务国际标准)提供
  • 如果我使用同一工作区的本地地址来部署 Web 服务客户端,则效果很好。即:

改为使用:

    http://172.26.0.40:85/WebServiceAmadeus/services/OTA_VehAvailRatePort?wsdl

我使用:

    /WebServiceAmadeus/WebContent/wsdl/KarveOta.wsdl

其中WebServiceAmadeus是同一工作区的项目文件夹。

当然这不是解决方案,因为只能在语言环境中工作。

更新

我试过其他CXF版本(2.4.2,3.0.2等)也有同样的问题。我曾经尝试用1.1版的SOAP解决同样的问题。从SOAP UI 5.0.0,我可以部署获取请求,但是响应说解组错误:?

共有3个答案

吉鸿宝
2023-03-14

Apache xml架构核心库版本2在通过Spring-ws从OTA xsd文件生成动态wsdl时会导致以下异常。

org.apache.ws.commons.schema.XmlSchema异常:

属性组必须设置ref name

在XmlSchema.1.4.7中使用spring-xml.2.0.5.RELEASE(max)将解决wsdl生成问题,即使内联值=“true”

<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>
柳经纶
2023-03-14

这可能是您的XML模式中的错误。检查它是否使用<代码>

慕容宏毅
2023-03-14

OTA也存在同样的问题。我使用的是Spring ws,对我来说,当我添加时,问题就解决了

<property name="inline" value="false"/>

在里面

org.springframework.xml.xsd.commons.CommonsXsdSchemaCollection

 类似资料:
  • 我有简单的客户端服务器应用程序使用RMI。服务器端应该生成某种PDF文件,客户端应该显示它。 当试图通过调用我自己的通用远程接口的正确方法在服务器端生成我的pdf时,被抛出在客户端。 我认为,使用RMI就像使用黑盒一样——客户机调用方法并接收响应,而不知道如何完成,对双方来说唯一的公共类是远程接口。此外,我认为这将允许我将客户端所需的依赖关系缩减到最小。 客户机必须让所有服务器的库都在其类路径中才

  • 根据本教程使用Azure资源管理器创建Service Fabric集群,我创建了服务器自签名的.pfx证书,然后输入证书指纹、SourceVault、CertificateURL到Azure Portal。 我应该怎么做才能获得客户端证书,才能将它的指纹输入到azure Portal?

  • 问题内容: Axis2和Eclipse是否可以生成Web Service客户端,并使其使用包中已经具有的Java类型,而不是创建自己的类型。原因当然是如果我已经创建了类型A,并且它创建了它自己的类型AI,则不能仅将类型A的变量分配给类型B的变量。 wsdl是从部署到应用程序服务器的Web服务生成的。如果无法从中生成它,则可以从已经存在的Java文件中生成一个客户端。 问题答案: 如果您确实想重用现

  • 首先,我想为这个问题发布一些真正的代码,但我不能,因为它的行太多了。也就是说,我的情况如下: 服务器端 我有一个RMI服务器,它等待客户端自己连接和“注册”,以便服务器可以对客户端进行函数调用。基本上,服务器有一个已发布的函数,其工作原理类似于以下伪代码: 客户端 在启动时,Client调用Naming.lookup([url])以获取服务器的存根,我将调用,然后调用。问题发生在服务器的方法的第一

  • 有什么想法吗? [信息]---appengine-maven-plugin:1.8.3:endpoints_get_client_lib(default-cli)@web-service-public--- [信息] [ERROR]com.google.appengine.repackaged.com.google.api.client.http.HttpresPonseException:500

  • 我需要创建web服务客户端,这家提供服务的公司向我们发送wsdl文件。我有wsdl文件、用户名和密码、服务url和txt文件,其中包含一些密钥,比如“20A9 38 4e 82 3a 94 d1…”。服务器有自签名证书,我试图通过InstallCert获取证书。java,使用keytool等生成密钥库。当我使用axis2 wsdl2java从wsdl生成客户端时,它会生成客户端,但在生成过程结束时