JAXB绑定的XSD外WSDL [英] JAXB Binding for XSD outside WSDL
问题描述
我们正在生成与第三方WSDL WSDL2Java的爪哇(意味着我们不能修改他)。 WSDL包含以下内容:
< WSDL:进口命名空间=HTTP:// somenamespace位置=xsdschema.xsd/>
在此xsdschema与的nillable =true,并生成报告冲突(重复)的ObjectFactory的元素。我们尝试使用绑定generateElementProperty =假。但在绑定为WSDL定义的定义,发电机忽略它,而当说,XSD定义WSDL2Java的绑定,该XSD不编译的一部分。如何解决呢?
有关WSDL XJB(generateElementProperty被忽略 - 仍在重复错误的ObjectFactory):
< JAXWS:绑定版本=2.0
的xmlns:WSDL =http://schemas.xmlsoap.org/wsdl/
的xmlns:JAXWS =http://java.sun.com/xml/ns/jaxws
的xmlns:JAXB =http://java.sun.com/xml/ns/jaxbJAXB:版本=2.1
的xmlns:XS =http://www.w3.org/2001/XMLSchema
wsdlLocation =wsdl3rd.wsdl> < JAXB:绑定>
< JAXB:globalBindings generateElementProperty =FALSE/>
< / JAXB:绑定>
< / JAXWS:绑定>
XJB为XSD(错误:XSD不是编译的一部分):
< JXB:绑定版本=2.1的xmlns:JXB =http://java.sun.com/xml/ns/jaxb的xmlns:XS =HTTP: //www.w3.org/2001/XMLSchema\">
< JXB:绑定的schemaLocation =xsdschema.xsd>
< JXB:绑定>
< JXB:globalBindings generateElementProperty =FALSE/>
< / JXB:绑定>
< / JXB:绑定>
< / JXB:绑定>
Maven的:
<&插件GT;
<&的groupId GT; org.apache.cxf< /的groupId>
<&的artifactId GT; cxf- codeGEN-插件< / artifactId的>
<&版GT; $ {cxf.version}< /版本>
<&执行GT;
<执行与GT;
<目标>
<&目标GT;的WSDL2Java< /目标>
< /目标>
<结构>
< wsdlRoot>的src / main /资源/ WSDL< / wsdlRoot>
< defaultOptions>
< bindingFiles> bindingFile> bindingFile.xjb< / bindingFile>
< / bindingFiles>
< / defaultOptions>
< /结构>
< /执行>
< /处决>
< /插件>
我建议你这一战略....
使用这个配置生成API和排除XSD类
<&插件GT;
<&的groupId GT; org.apache.cxf< /的groupId>
<&的artifactId GT; cxf- codeGEN-插件< / artifactId的>
<&版GT; $ {cxf.version}< /版本>
<&执行GT;
<执行与GT;
<&ID GT;生成来源和LT; / ID>
<阶段>生成来源和LT; /阶段>
<结构>
< wsdlOptions>
< wsdlOption>
&LT; WSDL&GT; $ {BASEDIR} /pathOfYourWSDL.wsdl</wsdl>
&LT; extraargs&GT;
&LT; extraarg&GT; -nexclude&LT; / extraarg&GT;
&LT; extraarg&GT;的http:// somenamespace&LT; / extraarg&GT;
&LT; / extraargs&GT;
&LT; / wsdlOption&GT;
&LT; / wsdlOptions&GT;
&LT; /结构&gt;
&LT;目标&GT;
&LT;&目标GT;的WSDL2Java&LT; /目标&GT;
&LT; /目标&GT;
&LT; /执行&GT;
&LT; /处决&GT;
&LT; /插件&GT;
使用这个插件与绑定配置生成XSD类
&LT;&插件GT;
&LT;&的groupId GT; org.jvnet.jaxb2.maven2&LT; /的groupId&GT;
&LT;&的artifactId GT;的maven-JAXB2-插件&LT; / artifactId的&GT;
&LT;&版GT; 0.8.1&LT; /版本&GT;
&LT;&执行GT;
&LT;执行与GT;
&LT;阶段&gt;生成来源和LT; /阶段&gt;
&LT;目标&GT;
&LT;&目标GT;生成和LT; /目标&GT;
&LT; /目标&GT;
&LT; /执行&GT;
&LT; /处决&GT;
&LT;结构&gt;
&LT;&ARGS GT;
&LT;&ARG GT;&-xannotate LT; / ARG&GT;
&LT;&ARG GT;&-nv LT; / ARG&GT;
&LT; / ARGS&GT;
&LT;扩展名为GT;真&LT; /展期&GT;
&LT; forceRegenerate&GT;真&LT; / forceRegenerate&GT;
&LT; bindingDirectory&GT; $ {BASEDIR} / pathOfYourXJB&LT; / bindingDirectory&GT;
&LT; bindingIncludes&GT;
&LT;&包括GT; yourXJB.xjb&LT; / - 包括GT;
&LT; / bindingIncludes&GT;
&LT;&架构GT;
&LT;&架构GT;
&LT;&文件集GT;
&LT;&目录GT; $ {BASEDIR} / pathOfYourXSD&LT; /目录&GT;
&所述包括(includes)GT;
&LT;&包括GT; yourXSD.xsd&LT; / - 包括GT;
&LT; / - 包括GT;
&LT; /文件集&GT;
&LT; /模式&GT;
&LT; /模式&GT;
&LT;调试和GT;真&LT; /调试&GT;
&LT(详细);真&LT; /详细&GT;
&LT;&插件GT;
&LT;&插件GT;
&LT;&的groupId GT; org.jvnet.jaxb2_commons&LT; /的groupId&GT;
&LT;&的artifactId GT; JAXB2-基础知识和LT; / artifactId的&GT;
&LT;&版GT; 0.6.2&LT; /版本&GT;
&LT; /插件&GT;
&LT;&插件GT;
&LT;&的groupId GT; org.jvnet.jaxb2_commons&LT; /的groupId&GT;
&LT;&的artifactId GT; JAXB2-基础,注释和LT; / artifactId的&GT;
&LT;&版GT; 0.6.2&LT; /版本&GT;
&LT; /插件&GT;
&LT; /插件&GT;
&LT; /结构&gt;
&LT; /插件&GT;
使用这个插件添加资源
&LT;&插件GT;
&LT;的groupId方式&gt;组织codehaus.mojo&LT; /的groupId&GT;
&LT;&的artifactId GT;建立辅助-Maven的插件&LT; / artifactId的&GT;
&LT;&版GT; 1.1&LT; /版本&GT;
&LT;&执行GT;
&LT;执行与GT;
&LT; ID&gt;添加源&LT; / ID&GT;
&LT;阶段&gt;生成来源和LT; /阶段&gt;
&LT;目标&GT;
&LT;目标&gt;添加源&LT; /目标&GT;
&LT; /目标&GT;
&LT;结构&gt;
&LT;来源和GT;
&lt;信源&GT;目标/生成的来源/ XJC&LT; /源&GT;
&lt;信源&GT;目标/生成的来源/ CXF&LT; /源&GT;
&LT; /来源&GT;
&LT; /结构&gt;
&LT; /执行&GT;
&LT; /处决&GT;
&LT; /插件&GT;
我用这个策略来划分从API的数据模型
We are generating java with wsdl2java from third party WSDL (means we cant modify him). WSDL contain:
<wsdl:import namespace="http://somenamespace" location="xsdschema.xsd" />
In this xsdschema are elements with nillable="true" and generator reports conflicts (duplications) in ObjectFactory. We try to use binding generateElementProperty="false". But in binding definition that is defined for WSDL, generator ignores it, and when defining bindings for xsd WSDL2Java said, that the XSD is not part of compilation. How to solve it?
XJB for WSDL (generateElementProperty is ignored - still duplication error in ObjectFactory):
<jaxws:bindings version="2.0"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
wsdlLocation="wsdl3rd.wsdl">
<jaxb:bindings>
<jaxb:globalBindings generateElementProperty="false"/>
</jaxb:bindings>
</jaxws:bindings>
XJB for XSD (error: XSD is not part of compilation):
<jxb:bindings version="2.1" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="xsdschema.xsd">
<jxb:bindings>
<jxb:globalBindings generateElementProperty="false"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
Maven:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<goals>
<goal>wsdl2java</goal>
</goals>
<configuration>
<wsdlRoot>src/main/resources/wsdl</wsdlRoot>
<defaultOptions>
<bindingFiles>bindingFile>bindingFile.xjb</bindingFile>
</bindingFiles>
</defaultOptions>
</configuration>
</execution>
</executions>
</plugin>
I suggest you this strategy....
use this config to generate the API and exclude the XSD classes
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/pathOfYourWSDL.wsdl</wsdl>
<extraargs>
<extraarg>-nexclude</extraarg>
<extraarg>http://somenamespace</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
use this plugin to generate the XSD classes with binding configuration
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.8.1</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<args>
<arg>-Xannotate</arg>
<arg>-nv</arg>
</args>
<extension>true</extension>
<forceRegenerate>true</forceRegenerate>
<bindingDirectory>${basedir}/pathOfYourXJB</bindingDirectory>
<bindingIncludes>
<include>yourXJB.xjb</include>
</bindingIncludes>
<schemas>
<schema>
<fileset>
<directory>${basedir}/pathOfYourXSD</directory>
<includes>
<include>yourXSD.xsd</include>
</includes>
</fileset>
</schema>
</schemas>
<debug>true</debug>
<verbose>true</verbose>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>0.6.2</version>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
<version>0.6.2</version>
</plugin>
</plugins>
</configuration>
</plugin>
use this plugin to add resources
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>target/generated-sources/xjc</source>
<source>target/generated-sources/cxf</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
I used this strategy to divide the data model from APIs
这篇关于JAXB绑定的XSD外WSDL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!