java - XmlSchemaException : Top-level attributes may not have a 'use'

标签 java web-services wsdl weblogic cxf

我使用 maven cxf-codegen-plugin 从 wsdl 生成了一个 Web 服务。这很好,我没有异常(exception)。 然后我尝试使用此代码实例化 Web 服务(生成服务类):

    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
    factory.setEndpointName(SERVICE_NAME);
    factory.setAddress("https://someadress:port/spec");
    factory.setServiceClass(Service.class);
    this.port = (Service) factory.create();

在调用 create 方法时,在 weblogic 上运行时收到以下异常:

weblogic.application.ModuleException: org.apache.ws.commons.schema.XmlSchemaException: Top-level attributes may not have a 'use'
    ...
Caused By: org.apache.ws.commons.schema.XmlSchemaException: Top-level attributes may not have a 'use'
    at org.apache.ws.commons.schema.XmlSchemaAttribute.setUse(XmlSchemaAttribute.java:109)
    at org.apache.ws.commons.schema.SchemaBuilder.handleAttribute(SchemaBuilder.java:966)
    at org.apache.ws.commons.schema.SchemaBuilder.handleSchemaElementChild(SchemaBuilder.java:1519)
    at org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:659)
    at org.apache.ws.commons.schema.SchemaBuilder.build(SchemaBuilder.java:157)
    at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:497)
    at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:483)
    at org.apache.cxf.common.xmlschema.SchemaCollection.read(SchemaCollection.java:133)
    at org.apache.cxf.databinding.AbstractDataBinding.addSchemaDocument(AbstractDataBinding.java:192)
    at org.apache.cxf.databinding.AbstractDataBinding.addSchemaDocument(AbstractDataBinding.java:95)
    at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:393)
    at org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86)
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:490)
    at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:697)
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:550)
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:265)
    at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:214)
    at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:101)
    at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:90)
    at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:155)
    at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:156)

AFIAK,在 Web 服务初始化中的任何地方都没有引用 wsdl,我假设当成功生成类时,Web 服务是从有效源生成的。

无论如何,我不知道该消息的含义。是的,我在互联网上找到了有关此问题的单个链接:http://cxf.547215.n5.nabble.com/Schema-validation-errors-on-publish-quot-top-level-elements-may-not-have-a-use-quot-td5724860.html 但我还是不知道出了什么问题。

另一件事是,我不太确定顶级属性的定义是什么。我用谷歌搜索“xml顶级属性”,但在结果的前两页上,没有定义。

因此,我搜索了从 wsdl 引用的 XSD,并发现了 opengis gml 中包含“use=”的一些内容以及其他 XSD:

<complexType name="UnitOfMeasureType">
    <sequence/>
    <attribute name="uom" type="gml:UomIdentifier" use="required"/>
</complexType>

还有这个:

<attributeGroup name="extendedLink">
    <attribute name="type" type="string" fixed="extended" form="qualified"/>
    <attribute ref="xlink:role" use="optional"/>
    <attribute ref="xlink:title" use="optional"/>
</attributeGroup>

其中一些事情有问题吗?

当我从单元测试中运行 Web 服务时,它可以工作,但在部署到 Weblogic 上时却不能。

我使用:

  • Apache CXF 2.6.11
  • Weblogic 12.1.2.0.0
  • Oracle Java 1.7.0_25

最佳答案

Weblogic 的最新版本使用 MOXy 作为其 JAXB 实现,而不是 JAXB 引用实现或内置于 JDK 中的实现。如果这在 Weblogic 之外工作,则可能是 MOXy 中的问题。 CXF 团队在 MOXy 的模式生成(以及其他领域)中发现了多个错误。好消息是 MOXy 团队通常会相当迅速地修复发现的任何问题。如果您可以将其提炼为一个小测试用例,那可能会有很大帮助。

关于java - XmlSchemaException : Top-level attributes may not have a 'use' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21117215/

相关文章:

java - 动态定义的 web 方法参数

javax.xml.bind.JAXBException : property "com.sun.xml.bind.defaultNamespaceRemap" is not supported

java - JBoss:如何从 WSDL 生成 Web 服务?

java - 验证消息的安全性时出错 - SAML token

java - 在java web应用程序中读取unix文件

macos - 在 mac 上使用 JNA 从 JComponent 获取 NSWindow

java - Web 服务安全和 Windows 证书

Maven:从jar中提取文件

java - 如何使 Google Drive Java SDK 读取/写入 "my Drive"而不是其他地方?

java - 无法在 JPA @Entity 类中声明 List 属性。它说 'Basic' 属性类型不应该是容器