This is the kind of error that XJC throws whenever trying to compile the FHIR schema:
XJC Error
Error while parsing schema(s).Location [ fhir-xhtml.xsd{48,2902}].
com.sun.istack.SAXParseException2; systemId: fhir-xhtml.xsd; lineNumber: 48; columnNumber: 2902; Property "Lang" is already defined. Use <jaxb:property> to resolve this conflict.
Ok so that says that "Lang" is already defined and looking at that part of the XSD reveals this...
XSD
<xs:attributeGroup name="i18n">
<xs:attribute name="lang" type="LanguageCode"/>
<xs:attribute ref="xml:lang"/>
...
It's pretty obvious why XJC would complain. There's a name collisions between the xml:lang reference and the lang attribute, both would get mapped to a variable named 'lang' in the generated Java code.
To fix it, it's just a matter of telling XJC to rename the xml:lang reference to 'xmlLang' when generating Java code while leaving the lang attribute as is. The following bindings would be suitable, see my CDA article linked above for the full binding file definition:
Bindings
<jaxb:bindings schemaLocation="http://hl7.org/fhir/2016May/fhir-xhtml.xsd">
<jaxb:bindings node="//xs:attributeGroup[@name='i18n']/xs:attribute[@ref='xml:lang']">
<jaxb:property name="xmlLang"/>
</jaxb:bindings>
<jaxb:bindings node="//xs:element[@name='bdo']/xs:complexType/xs:complexContent/xs:extension/xs:attribute[@ref='xml:lang']">
<jaxb:property name="xmlLang"/>
</jaxb:bindings>
</jaxb:bindings>
Here's an answer from StackOverlow that is similar in nature and covers it in more detail.
Then it's just a matter of telling XJC that you want to use a binding file and the FHIR schema should compile!
-i