具有多个模式的WSDL的自定义解析和打印方法

Veg*_*ard 5 java xml schema wsdl jaxb

我有使用自定义javaTypes的WSDL的问题,其中有几个模式.绑定适用于具有给定命名空间的模式,但是对于没有命名空间的模式,编译失败.

这是bindings.xml文件:

<jaxb:bindings version="2.1" 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:common="urn:my:ns">
<jaxb:globalBindings generateElementProperty="false">
    <jaxb:serializable uid="1"/>
    <jaxb:javaType name="java.util.Date" xmlType="xs:date"
                   parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDate"
                   printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDate"/>
    <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime"
                   parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
                   printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/>
    <jaxb:javaType name="java.util.UUID" xmlType="common:uuid"
                   parseMethod="my.package.UuidConverter.parse"
                   printMethod="my.package.UuidConverter.print"/>
</jaxb:globalBindings>
</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)

我正在使用cxf-codegen-plugin

错误消息是:undefined simple type

当urn:my:ns不存在于其中一个模式中时,是否可以忽略UUID绑定?或者是否可以使用不同的方法归档此绑定?

J0e*_*gan 1

我不认为可以有条件地忽略UUID您所描述的绑定;我不确定我是否明白您询问是否“可以存档此绑定”的意思,但我感觉也不是。

UUID通常会转换为Java 论坛中讨论的xs:string形式。 JAX-B 文档也证实了这种映射。(只需在链接的文档页面中搜索UUID 。)

考虑这样的事情:

<jaxb:bindings version="2.1" 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">
<jaxb:globalBindings generateElementProperty="false">
    <jaxb:serializable uid="1"/>
    <jaxb:javaType name="java.util.Date" xmlType="xs:date"
                   parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDate"
                   printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDate"/>
    <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime"
                   parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
                   printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/>
    <jaxb:javaType name="java.util.UUID" xmlType="xs:string"
                   parseMethod="my.package.UuidConverter.parse"
                   printMethod="my.package.UuidConverter.print"/>
</jaxb:globalBindings>
</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)

如果您仍然遇到问题,请考虑相关的 SO 答案

  • 我认为这不会像我希望的那样工作,原因是您的示例将解析 {http://www.w3.org/2001/XMLSchema} 字符串的所有实例,我想要的是为 {urn:my:ns}uuid 制作一个解析器。如果在存在 {urn:my:ns}uuid 的单个模式上使用我的原始示例,则效果很好。 (2认同)