相关疑难解决方法(0)

WSDL 之外的 XSD 的 JAXB 绑定

我们正在使用来自第三方 WSDL 的 wsdl2java 生成 java(意味着我们无法修改他)。WSDL 包含:

<wsdl:import namespace="http://somenamespace" location="xsdschema.xsd" /> 
Run Code Online (Sandbox Code Playgroud)

在此 xsdschema 中,元素带有 nillable="true",生成器报告 ObjectFactory 中的冲突(重复)。我们尝试使用绑定generateElementProperty =“false”。但是在为 WSDL 定义的绑定定义中,生成器会忽略它,并且在为 xsd WSDL2Java 定义绑定时,XSD 不是编译的一部分。怎么解决呢?

WSDL 的 XJB(generateElementProperty 被忽略 - 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>
Run Code Online (Sandbox Code Playgroud)

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

<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> 
Run Code Online (Sandbox Code Playgroud)

行家:

            <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>
Run Code Online (Sandbox Code Playgroud)

binding xsd wsdl wsdl2java jaxb

5
推荐指数
1
解决办法
6790
查看次数

JAXB问题:nameXmlTransform typeName前缀不起作用

我希望将几个模式转换为Java代码.模式都很相似; 例如,每个人都有一个TXLife根对象.如果每个模式生成具有唯一类名的代码,则管理代码会更容易.我可以使用"package"绑定将每个模式的代码放入自己的包中,但是当我尝试使用"prefix"绑定来更改类名时,它会忽略它.

这是我的schema_bindings.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" jaxb:version="2.0">
   <jaxb:bindings schemaLocation="schemas/HI_Request.xsd" node="/xsd:schema">
      <jaxb:schemaBindings>
         <jaxb:package name="com.mycompany.hi"/>
         <jaxb:nameXmlTransform>
            <jaxb:typeName prefix="Hi_"/>
         </jaxb:nameXmlTransform>
      </jaxb:schemaBindings>
   </jaxb:bindings>
</jaxb:bindings> 

当我运行xjc命令时,我得到了(我必须修改xjc.bat文件中的类路径才能使它工作):

C:\ test>\progs\Java\jaxb-ri-2.2.7\bin\xjc.bat -extension -d src -b schema_bindings.xml schemas

parsing a schema...
compiling a schema...
com\mycompany\hi\Holding.java
com\mycompany\hi\InquiryLevel.java
com\mycompany\hi\KeyedValue.java
com\mycompany\hi\OLifE.java
com\mycompany\hi\ObjectFactory.java
com\mycompany\hi\Policy.java
com\mycompany\hi\TXLife.java
com\mycompany\hi\TXLifeRequest.java
com\mycompany\hi\TransMode.java
com\mycompany\hi\TransSubType.java
com\mycompany\hi\TransType.java

我希望的是每个java文件(以及里面的类)都会被命名为"Hi_ <name>".Jaxb似乎完全忽略了我的"前缀"规范.我在绑定文件上尝试了几种变体.我也尝试使用Ant xjc任务进行相同的绑定,所有结果都相同.

我可以使用这些结果,但这意味着处理来自一个模式的输入并将输出生成到另一个模式的代码必须使用完全限定的类名来引用对象,这很尴尬.

java xsd jaxb

2
推荐指数
1
解决办法
5614
查看次数

标签 统计

jaxb ×2

xsd ×2

binding ×1

java ×1

wsdl ×1

wsdl2java ×1