Apache CXF
cxf-codegen-plugin
Maven
プラグインを使用して、WSDL
ファイルからソースを生成しています。問題は、String
の代わりにJAXBElement<String>
が生成されることです。次のようなjaxb-bindings.xml
ファイルを追加しました。
<jaxb:bindings version="2.1"
xmlns:jaxb="http://Java.Sun.com/xml/ns/jaxb">
<jaxb:globalBindings generateElementProperty="false"/>
</jaxb:bindings>
これにより、JAXB
がJAXBElement<String>
を生成できなくなります。しかし、String
の代わりにJAXBElement<String>
が生成されたままです。
Maven
プラグインは次のようになります。
<plugin>
<groupId>org.Apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.runtime.version}</version>
<dependencies>
<dependency>
<groupId>org.Apache.cxf</groupId>
<artifactId>cxf-rt-bindings-soap</artifactId>
<version>${cxf.runtime.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>generate-jaxb</id>
<phase>generate-sources</phase>
<configuration>
<additionalJvmArgs>-Dfile.encoding=UTF8</additionalJvmArgs>
<wsdlOptions>
<wsdlOption>
<wsdl>src/main/resources/wsdl/Cubiks.wsdl</wsdl>
<extraargs>
<extraarg>-b</extraarg>
<extraarg>${basedir}/jaxb-bindings.xml</extraarg>
<extraarg>-b</extraarg>
<extraarg>${basedir}/jaxws-bindings.xml</extraarg>
<extraarg>-exsh</extraarg>
<extraarg>true</extraarg>
<extraarg>-wsdlLocation</extraarg>
<extraarg></extraarg>
</extraargs>
</wsdlOption>
<wsdlOption>
<wsdl>src/main/resources/wsdl/CubiksCallBackService.wsdl</wsdl>
<extraargs>
<extraarg>-b</extraarg>
<extraarg>${basedir}/jaxws-bindings.xml</extraarg>
<extraarg>-b</extraarg>
<extraarg>${basedir}/jaxb-bindings.xml</extraarg>
<extraarg>-exsh</extraarg>
<extraarg>true</extraarg>
<extraarg>-p</extraarg>
<extraarg>com.cubiks.ws.callback</extraarg>
<extraarg>-wsdlLocation</extraarg>
<extraarg></extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2Java</goal>
</goals>
</execution>
</executions>
</plugin>
CXF
バージョンは2.6.0
です。誰かがどこに問題があるのか知っていますか?
[〜#〜] edit [〜#〜]
XSDは非常に巨大です。これは、JAXBElement<String>
を生成する要素です
<xs:complexType name="ServiceResponse">
<xs:sequence>
<xs:element minOccurs="0" name="RequestStatus" type="tns:RequestStatus"/>
<xs:element minOccurs="0" name="RequestStatusDescription" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ServiceResponse" nillable="true" type="tns:ServiceResponse"/>
生成されるソースは次のとおりです。
@XmlElementRef(name = "RequestStatusDescription", namespace = "http://www.cubiksonline.com/2009/08/AssessmentProvider", type = JAXBElement.class)
protected JAXBElement<String> requestStatusDescription;
jaxb:globalBindings
を別のjaxb:bindings
でラップする必要がありました。
<jaxb:bindings version="2.0"
xmlns:jaxb="http://Java.Sun.com/xml/ns/jaxb">
<jaxb:bindings>
<jaxb:globalBindings generateElementProperty="false"/>
</jaxb:bindings>
</jaxb:bindings>
これですべてが機能し、JAXBElement<String>
は生成されなくなりました。
Nillableとminoccursを一緒にすることはできません。とにかく文字列には意味がないので、minoccursを削除します。
Jaxb-binding.xmlに追加したいと思います。
<jaxb:bindings ... xmlns:xjc="http://Java.Sun.com/xml/ns/jaxb/xjc">
<jaxb:globalBindings generateElementProperty="false">
<xjc:simple />
<!-- ... -->
</jaxb:globalBindings>
</jaxb:bindings>