JAXB绑定的XSD外WSDL [英] JAXB Binding for XSD outside WSDL

查看:667
本文介绍了JAXB绑定的XSD外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 =htt​​p://schemas.xmlsoap.org/wsdl/
  的xmlns:JAXWS =htt​​p://java.sun.com/xml/ns/jaxws
  的xmlns:JAXB =htt​​p://java.sun.com/xml/ns/jaxbJAXB:版本=2.1
  的xmlns:XS =htt​​p://www.w3.org/2001/XMLSchema
               wsdlLocation =wsdl3rd.wsdl>    < JAXB:绑定>
        < JAXB:globalBindings generateElementProperty =FALSE/>
    < / JAXB:绑定>
< / JAXWS:绑定>

XJB为XSD(错误:XSD不是编译的一部分):

 < JXB:绑定版本=2.1的xmlns:JXB =htt​​p://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} /pathOfYou​​rWSDL.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} / pathOfYou​​rXJB&LT; / bindingDirectory&GT;
                    &LT; bindingIncludes&GT;
                        &LT;&包括GT; yourXJB.xjb&LT; / - 包括GT;
                    &LT; / bindingIncludes&GT;
                    &LT;&架构GT;
                        &LT;&架构GT;
                            &LT;&文件集GT;
                                &LT;&目录GT; $ {BASEDIR} / pathOfYou​​rXSD&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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆