Specify @XmlJavaTypeAdapter class via bindings file?

后端 未结 2 369
孤街浪徒
孤街浪徒 2020-12-19 07:12

I have a 3rd party interface that supplies xsd files that matches their API. Some of their mappings are not quite Java, the usual boolean as 0 & 1 :-(

I\'d like

相关标签:
2条回答
  • 2020-12-19 07:16

    You need to use <xjc:javaType> in your binding config instead of <jaxb:javaType>. For example:

    <xjc:javaType name="java.lang.Boolean" xmlType="xs:boolean"
                  adapter="mumble.bindings.BooleanAdapter"/>
    

    I understand I'm answering to an old question, but I don't have enough reputation to write a comment.

    0 讨论(0)
  • 2020-12-19 07:39

    It's a super late response, I realize, but even mvv's response left me struggling to totally grasp what I was doing and where in the structure the new element fit, so I wanted to add some further detail for anyone coming across this later.

    Per mvv, the easiest answer is to change to using the xjc:javaType. See jaxb customization for the detailed documentation on using xjc:javaType.

    You'll also need to change your custom adapter (BooleanAdapter) to implement the XmlAdapter interface.

    Ultimately, your binding would instead look like this:

    <?xml version="1.0" encoding="UTF-8"?>
    <jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns="http://java.sun.com/xml/ns/jaxws"
        jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.0">
        <jaxb:bindings schemaLocation="GetUserDetailsResponse.xsd" node="/xs:schema" >
            <jaxb:globalBindings underscoreBinding="asWordSeparator" >
                <jaxb:serializable uid="1" />
                <xjc:javaType name="java.lang.Boolean" xmlType="xs:boolean"
                      adapter="mumble.bindings.BooleanAdapter" />
            </jaxb:globalBindings>
        </jaxb:bindings>
    </jaxb:bindings>
    
    0 讨论(0)
提交回复
热议问题