Java 同名simpleType上的XJB和JAXB绑定

Java 同名simpleType上的XJB和JAXB绑定,java,web-services,jaxb,wsdl,xjb,Java,Web Services,Jaxb,Wsdl,Xjb,我试图用jaxb和spring生成JAVA代码,但当我有两个同名但名称空间不同的SimpleType作为wsdl文件时,我无法让它工作。有人知道我怎么解决这个问题吗 我一直在尝试jaxb:factoryMethod标记,但语法不正确。但也许有更简单的方法 binding.xjb <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <jaxb:bindings xmlns:jaxb="http://java.su

我试图用jaxb和spring生成JAVA代码,但当我有两个同名但名称空间不同的SimpleType作为wsdl文件时,我无法让它工作。有人知道我怎么解决这个问题吗

我一直在尝试
jaxb:factoryMethod
标记,但语法不正确。但也许有更简单的方法

binding.xjb

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:annox="http://annox.dev.java.net"
    xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
    jaxb:extensionBindingPrefixes="xjc annox"
    version="2.1"
    targetNamespace="http://com.company/generated"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

<jaxb:globalBindings>
</jaxb:globalBindings>

<jaxb:bindings 
         node="/wsdl:definitions/wsdl:types/xs:schema[namespace::*[.='http://com.company/storetaxinformation']]/xs:simpleType[@name='TypeOfTax']" 
         schemaLocation="../../../target/classes/disb.wsdl">
    <annox:annotateClass>@javax.xml.bind.annotation.XmlRootElement(name="TypeOfTaxStoreTax")</annox:annotateClass>
</jaxb:bindings>

<jaxb:bindings
        node="/wsdl:definitions/wsdl:types/xs:schema[namespace::*[.='http://com.company/gettaxinformation']]/xs:simpleType[@name='TypeOfTax']"
        schemaLocation="../../../target/classes/disb.wsdl">
    <annox:annotateClass>@javax.xml.bind.annotation.XmlRootElement(name="TypeOfTaxInfo")</annox:annotateClass>
</jaxb:bindings>
</jaxb:bindings>
  <jaxb:bindings schemaLocation="../../../target/classes/disb.wsdl"
     node="/wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://com.company/generated/storetax']" >
     <jaxb:schemaBindings>
         <jaxb:package name="com.company.generated.storetax"></jaxb:package>
     </jaxb:schemaBindings>
</jaxb:bindings>

<jaxb:bindings schemaLocation="../../../target/classes/disb.wsdl"
    node="/wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://com.company/storeaccount']" >
    <jaxb:schemaBindings>
        <jaxb:package name="com.company.generated.storeaccount"></jaxb:package>
    </jaxb:schemaBindings>
</jaxb:bindings>

不,
@XmlRootElement
不会有帮助。这是关于
ObjectFactory
中的方法名

您确定是简单类型导致冲突吗?XJC指出了
ObjectFactory
中的方法,因此它应该是全局元素,而不是简单类型

以下是
factoryMethod
定制的一个示例:

<jaxb:bindings 
    schemaLocation="http://schemas.opengis.net/citygml/texturedsurface/1.0/texturedSurface.xsd" 
    node="/xs:schema">
    <jaxb:bindings node="xs:element[@name='_Appearance']">
        <jaxb:factoryMethod name="AAppearance"/>
    </jaxb:bindings>
</jaxb:bindings>


您需要找出哪些元素会导致冲突,并对其进行自定义。不是简单的类型。

不,
@XmlRootElement
没有帮助。这是关于
ObjectFactory
中的方法名

您确定是简单类型导致冲突吗?XJC指出了
ObjectFactory
中的方法,因此它应该是全局元素,而不是简单类型

以下是
factoryMethod
定制的一个示例:

<jaxb:bindings 
    schemaLocation="http://schemas.opengis.net/citygml/texturedsurface/1.0/texturedSurface.xsd" 
    node="/xs:schema">
    <jaxb:bindings node="xs:element[@name='_Appearance']">
        <jaxb:factoryMethod name="AAppearance"/>
    </jaxb:bindings>
</jaxb:bindings>


您需要找出哪些元素会导致冲突,并对其进行自定义。不是简单的类型。

我们现在已经解决了这个问题,是
元素导致了部分问题。我们还确保将每个模式/名称空间绑定到它自己的包。这样ObjectFactory类就不会抱怨了

pom.xml

...
<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.12.3</version>
    <executions>
      <execution>
        <id>generate-sources-servicename</id>
        <goals>
          <goal>generate</goal>
        </goals>
        <configuration>
          <schemaLanguage>WSDL</schemaLanguage>
          <!-- see binding.xjb
          <generatePackage>com.company.generated</generatePackage>
          -->
          <extension>true</extension>
          <forceRegenerate>true</forceRegenerate>
          <bindingIncludes>
...
。。。
org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
0.12.3
生成源servicename
生成
WSDL
真的
真的
...
binding.xjb

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:annox="http://annox.dev.java.net"
    xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
    jaxb:extensionBindingPrefixes="xjc annox"
    version="2.1"
    targetNamespace="http://com.company/generated"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

<jaxb:globalBindings>
</jaxb:globalBindings>

<jaxb:bindings 
         node="/wsdl:definitions/wsdl:types/xs:schema[namespace::*[.='http://com.company/storetaxinformation']]/xs:simpleType[@name='TypeOfTax']" 
         schemaLocation="../../../target/classes/disb.wsdl">
    <annox:annotateClass>@javax.xml.bind.annotation.XmlRootElement(name="TypeOfTaxStoreTax")</annox:annotateClass>
</jaxb:bindings>

<jaxb:bindings
        node="/wsdl:definitions/wsdl:types/xs:schema[namespace::*[.='http://com.company/gettaxinformation']]/xs:simpleType[@name='TypeOfTax']"
        schemaLocation="../../../target/classes/disb.wsdl">
    <annox:annotateClass>@javax.xml.bind.annotation.XmlRootElement(name="TypeOfTaxInfo")</annox:annotateClass>
</jaxb:bindings>
</jaxb:bindings>
  <jaxb:bindings schemaLocation="../../../target/classes/disb.wsdl"
     node="/wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://com.company/generated/storetax']" >
     <jaxb:schemaBindings>
         <jaxb:package name="com.company.generated.storetax"></jaxb:package>
     </jaxb:schemaBindings>
</jaxb:bindings>

<jaxb:bindings schemaLocation="../../../target/classes/disb.wsdl"
    node="/wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://com.company/storeaccount']" >
    <jaxb:schemaBindings>
        <jaxb:package name="com.company.generated.storeaccount"></jaxb:package>
    </jaxb:schemaBindings>
</jaxb:bindings>

我们现在已经解决了这个问题,是
元素造成了部分问题。我们还确保将每个模式/名称空间绑定到它自己的包。这样ObjectFactory类就不会抱怨了

pom.xml

...
<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.12.3</version>
    <executions>
      <execution>
        <id>generate-sources-servicename</id>
        <goals>
          <goal>generate</goal>
        </goals>
        <configuration>
          <schemaLanguage>WSDL</schemaLanguage>
          <!-- see binding.xjb
          <generatePackage>com.company.generated</generatePackage>
          -->
          <extension>true</extension>
          <forceRegenerate>true</forceRegenerate>
          <bindingIncludes>
...
。。。
org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
0.12.3
生成源servicename
生成
WSDL
真的
真的
...
binding.xjb

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:annox="http://annox.dev.java.net"
    xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
    jaxb:extensionBindingPrefixes="xjc annox"
    version="2.1"
    targetNamespace="http://com.company/generated"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

<jaxb:globalBindings>
</jaxb:globalBindings>

<jaxb:bindings 
         node="/wsdl:definitions/wsdl:types/xs:schema[namespace::*[.='http://com.company/storetaxinformation']]/xs:simpleType[@name='TypeOfTax']" 
         schemaLocation="../../../target/classes/disb.wsdl">
    <annox:annotateClass>@javax.xml.bind.annotation.XmlRootElement(name="TypeOfTaxStoreTax")</annox:annotateClass>
</jaxb:bindings>

<jaxb:bindings
        node="/wsdl:definitions/wsdl:types/xs:schema[namespace::*[.='http://com.company/gettaxinformation']]/xs:simpleType[@name='TypeOfTax']"
        schemaLocation="../../../target/classes/disb.wsdl">
    <annox:annotateClass>@javax.xml.bind.annotation.XmlRootElement(name="TypeOfTaxInfo")</annox:annotateClass>
</jaxb:bindings>
</jaxb:bindings>
  <jaxb:bindings schemaLocation="../../../target/classes/disb.wsdl"
     node="/wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://com.company/generated/storetax']" >
     <jaxb:schemaBindings>
         <jaxb:package name="com.company.generated.storetax"></jaxb:package>
     </jaxb:schemaBindings>
</jaxb:bindings>

<jaxb:bindings schemaLocation="../../../target/classes/disb.wsdl"
    node="/wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://com.company/storeaccount']" >
    <jaxb:schemaBindings>
        <jaxb:package name="com.company.generated.storeaccount"></jaxb:package>
    </jaxb:schemaBindings>
</jaxb:bindings>