【问题标题】:Use JAXWS enableWrapperStyle while generating Java source with XJC在使用 XJC 生成 Java 源代码时使用 JAXWS enableWrapperStyle
【发布时间】:2016-06-28 10:42:17
【问题描述】:

我正在尝试从 XSD 生成 Java 源代码,并且必须使用 JAXWS 禁用包装器样式。我已经编写了自定义绑定,但似乎 JAXWS 不适用于 XJC。我使用的绑定非常简单。

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns="http://java.sun.com/xml/ns/jaxws"
version="2.1" jaxb:extensionBindingPrefixes="xjc">

<jaxb:bindings>
    <jaxb:globalBindings typesafeEnumMaxMembers="2000" generateElementProperty="false" >
         <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
    </jaxb:globalBindings>
</jaxb:bindings>

如果我尝试运行 ant 脚本,则会收到以下错误消息。

 [xjc] [ERROR] Unsupported binding namespace "http://java.sun.com/xml/ns/jaxws". Perhaps you meant "http://java.sun.com/xml/ns/jaxb/xjc"?
  [xjc]   line 2 of file:/D:/xxxxxxxxxx/xxxxx/xxxx.xsd
  [xjc] [ERROR] cvc-complex-type.2.4.a: Invalid content was found starting with element 'jaxws:enableWrapperStyle'. One of '{"http://java.sun.com/xml/ns/jaxb":javaType, "http://java.sun.com/xml/ns/jaxb":serializable, "http://java.sun.com/xml/ns/jaxb/xjc":serializable, "http://java.sun.com/xml/ns/jaxb/xjc":superClass, "http://java.sun.com/xml/ns/jaxb/xjc":superInterface, "http://java.sun.com/xml/ns/jaxb/xjc":typeSubstitution, "http://java.sun.com/xml/ns/jaxb/xjc":smartWildcardDefaultBinding, "http://java.sun.com/xml/ns/jaxb/xjc":simple, "http://java.sun.com/xml/ns/jaxb/xjc":treatRestrictionLikeNewType, "http://java.sun.com/xml/ns/jaxb/xjc":javaType, "http://java.sun.com/xml/ns/jaxb/xjc":generateElementProperty, "http://java.sun.com/xml/ns/jaxb/xjc":noMarshaller, "http://java.sun.com/xml/ns/jaxb/xjc":noUnmarshaller, "http://java.sun.com/xml/ns/jaxb/xjc":noValidator, "http://java.sun.com/xml/ns/jaxb/xjc":noValidatingUnmarshaller}' is expected.
  [xjc]   line 8 of file:/D:/xxxxxxxxxx/xxxxx/xxxx/xsd/xsd-binding.xml

我已经尝试过只使用 jaxws,但是 XJC 期望 JAXB 作为主要绑定。 使用此绑定:

<bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://java.sun.com/xml/ns/jaxws"
    jaxb:version="2.1" extensionBindingPrefixes="xjc annox">
    <enableWrapperStyle>false</enableWrapperStyle>
    <jaxb:bindings>
        <jaxb:globalBindings typesafeEnumMaxMembers="2000" generateElementProperty="false" />
    </jaxb:bindings>
</bindings>

我收到了错误:

[xjc] [ERROR] not an external binding file. The root element must be {http://java.sun.com/xml/ns/jaxb}bindings but it is {http://java.sun.com/xml/ns/jaxws}bindings
      [xjc]   line ? of file:/D:/xxxxxx/xsd-binding.xml
      [xjc] [ERROR] Unexpected <bindings> appears at line 4 column 61
      [xjc]   line 4 of file:/D:/xxxxxx/xsd-binding.xml

可以在 jaxb 中使用jaxws:enableWrapperStyle 吗?如果是,我忽略了什么?提前谢谢!

【问题讨论】:

    标签: java jaxb jax-ws xjc


    【解决方案1】:

    我找到了解决方案。 JAXWS-element 必须在 JAXB-element 内部,并且必须声明如下:

    <?xml version="1.0"?>
    <jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
        xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.1" jaxb:extensionBindingPrefixes="xjc annox">
        <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
            <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
        </jaxws:bindings>
        <jaxb:bindings>
            <jaxb:globalBindings typesafeEnumMaxMembers="2000" generateElementProperty="false"/>
        </jaxb:bindings>
    </jaxb:bindings>
    

    【讨论】:

    • How can I switch my generated web service method calls from wrapper style to non wrapper-style (or vice-versa)?部分查看文档cxf.apache.org/docs/wsdl-to-java.html也是值得的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2012-05-04
    • 2023-03-20
    • 1970-01-01
    • 2012-12-03
    • 2013-02-02
    • 1970-01-01
    相关资源
    最近更新 更多