JAXB compiler is binding xs:boolean to Java Boolean wrapper class, instead of boolean primitive type

后端 未结 4 1700
天涯浪人
天涯浪人 2020-12-09 10:36

I\'m migrating a project from JAXB 1.0 to JAXB 2.1 and I\'m having problems with the datatype mapping.

I\'m using the Ant xjc binding compiler, and I\'ve su

4条回答
  •  离开以前
    2020-12-09 10:56

    Problem

    The reason you are getting Boolean instead of boolean is that you have minOccurs="0" in your element definition. A null value will be stored for an absent element.

    
    

    What the Solution Should Be

    The solution should be an external binding file that indicates that a primitive type should be used for optional values (see section 7.5.1 of the JAXB 2.2 specification).

    
    
        
    
    

    The external binding file is specified using the -b option with XJC.

    xjc -b binding.xml my-schema.xsd
    

    Why That Solution Does Not Work

    The following bugs have been opened to track the issue with optionalProperty="primitive".

    • https://github.com/javaee/jaxb-v2/issues/510
    • https://github.com/javaee/jaxb-v2/issues/926

    Workaround

    If you don't like the way a class is generated in JAXB, then you can create a class yourself and have JAXB pull it in as part of the schema to class generation.

    binding.xml

    
    
        
            
                
            
        
    
    

    UsageAuthRateCharge

    Create this class with the methods as you want them.

    XJC Call

    Use the -b flag on the XJC call to specify the binding.xml file

    xjc -b binding.xml my-schema.xsd
    

    UPDATE

    What I was really hoping was that one of the readers might be a jaxb dev team member who could do the change easily in jaxb. User archenroot offered a possible solution in his comments on jaxb issue 927 (a duplicate of 926) which leads me to think that for the right person, it would be a simple job to fix jaxb

    I'm the EclipseLink JAXB (MOXy) lead. I have reached out to my colleagues who do the JAXB reference implementation (they also work for Oracle). Below is the reply I got from them:

    I’ve tested in trunk - and the problem exists. I’ll check code how easy is to fix it.

    Hopefully you will be able to get a real fix for this issue.

提交回复
热议问题