2017-01-09 108 views
0

我对某些模式有一些控制权,所以我的问题与类似于此的有点不同。我有三个模式,c.xsd导入b.xsd,b.xsd导入a.xsd。所有三个都有不同的名称空间。两个类具有相同的XML类型名称maven jaxb插件,Spring

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns="ANamespace" targetNamespace="ANamespace" version="1.0" jaxb:extensionBindingPrefixes="xjc" jaxb:version="1.0"> 
<xs:complexType name="ClassA"> 
    <xs:sequence> 
     <xs:element name="classAFieldName" type="xs:string" minOccurs="0"> 
     </xs:element> 
    </xs:sequence> 
</xs:complexType> 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns="BNamespace" targetNamespace="BNamespace" version="1.0" jaxb:extensionBindingPrefixes="xjc" jaxb:version="1.0"> 


<xs:import namespace="ANamespace" schemaLocation="a.xsd"/> 

<xs:complexType name="ClassB"> 
    <xs:sequence> 
     <xs:element name="classBFieldName" type="xs:string" minOccurs="0"> 
     </xs:element> 
    </xs:sequence> 
</xs:complexType> 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns="CNamespace" targetNamespace="CNamespace" version="1.0" jaxb:extensionBindingPrefixes="xjc" jaxb:version="1.0"> 


<xs:import namespace="BNamespace" schemaLocation="b.xsd"/> 

<xs:complexType name="ClassC"> 
    <xs:sequence> 
     <xs:element name="classCFieldName" type="xs:string" minOccurs="0"> 
     </xs:element> 
    </xs:sequence> 
</xs:complexType> 

A类产生两次,一次在org.testing.common,一次在org.testing.c和两者两者都有相同的命名空间@XmlType(name =“ClassA”,namespace =“ANamespace”)但是,Spring并不知道要使用哪一个。需要ClassA生成两次?

这里是我的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>com.wfs.fi.stp</groupId> 
<artifactId>testing</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>jar</packaging> 

<name>testing</name> 
<url>http://maven.apache.org</url> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.eclipse.m2e</groupId> 
      <artifactId>lifecycle-mapping</artifactId> 
      <version>1.0.0</version> 
      <configuration> 
       <lifecycleMappingMetadata> 
        <pluginExecutions> 
         <pluginExecution> 
          <pluginExecutionFilter> 
           <groupId>org.jvnet.jaxb2.maven2</groupId> 
           <artifactId>maven-jaxb2-plugin</artifactId> 
           <versionRange>[0.13.1,)</versionRange> 
           <goals> 
            <goal>generate</goal> 
           </goals> 
          </pluginExecutionFilter> 
          <action> 
           <configurator> 
            <id>org.eclipselabs.m2e.jaxb2.connector.Jaxb2JavaProjectConfigurator</id> 
           </configurator> 
          </action> 
         </pluginExecution> 
        </pluginExecutions> 
       </lifecycleMappingMetadata> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.jvnet.jaxb2.maven2</groupId> 
      <artifactId>maven-jaxb2-plugin</artifactId> 
      <version>0.13.1</version> 
      <executions> 
       <execution> 
        <id>A</id> 
        <goals> 
         <goal>generate</goal> 
        </goals> 
        <configuration> 
         <schemaDirectory>src/main/resources</schemaDirectory> 
         <schemaIncludes> 
          <include>a.xsd</include> 
         </schemaIncludes> 
         <bindingIncludes> 
          <include>a.xjb</include> 
         </bindingIncludes> 
         <generatePackage>org.testing.common</generatePackage> 
         <generateDirectory>${project.build.directory}/common_generated</generateDirectory> 
         <episode>true</episode> 
         <episodeFile>${project.build.directory}/common.episode</episodeFile> 
         <extension>true</extension> 
         <verbose>true</verbose> 
         <properties> 
          <property> 
           <name>javax.xml.accessExternalSchema</name> 
           <value>all</value> 
          </property> 
          <property> 
           <name>javax.xml.accessExternalDTD</name> 
           <value>all</value> 
          </property> 
         </properties> 
         <args> 
          <arg>-npa</arg> 
         </args> 
         <disableXmlSecurity>true</disableXmlSecurity> 
         <accessExternalSchema>all</accessExternalSchema> 
         <accessExternalDTD>all</accessExternalDTD> 
        </configuration> 
       </execution> 
       <execution> 
        <id>B</id> 
        <goals> 
         <goal>generate</goal> 
        </goals> 
        <configuration> 
         <schemaDirectory>src/main/resources</schemaDirectory> 
         <schemaIncludes> 
          <include>b.xsd</include> 
         </schemaIncludes> 
         <generatePackage>org.testing.b</generatePackage> 
         <generateDirectory>${project.build.directory}/b_generated</generateDirectory> 
         <bindingIncludes> 
          <include>b.xjb</include> 
         </bindingIncludes> 
         <episode>true</episode> 
         <args> 
          <arg>-b</arg> 
          <arg>${project.build.directory}/common.episode</arg> 
          <arg>-npa</arg> 
         </args> 
         <episodeFile>${project.build.directory}/b.episode</episodeFile> 
         <extension>true</extension> 
         <verbose>true</verbose> 
         <disableXmlSecurity>true</disableXmlSecurity> 
         <accessExternalSchema>all</accessExternalSchema> 
         <accessExternalDTD>all</accessExternalDTD> 
        </configuration> 
       </execution> 

       <execution> 
        <id>C</id> 
        <goals> 
         <goal>generate</goal> 
        </goals> 
        <configuration> 
         <schemaDirectory>src/main/resources</schemaDirectory> 
         <schemaIncludes> 
          <include>c.xsd</include> 
         </schemaIncludes> 
         <generatePackage>org.testing.c</generatePackage> 
         <generateDirectory>${project.build.directory}/c_generated</generateDirectory> 
         <bindingIncludes> 
          <include>c.xjb</include> 
         </bindingIncludes> 
         <args> 
          <arg>-b</arg> 
          <arg>${project.build.directory}/b.episode</arg> 

          <arg>-npa</arg> 
         </args> 
         <plugins> 
          <plugin> 
           <groupId>org.jvnet.jaxb2_commons</groupId> 
           <artifactId>jaxb2-basics</artifactId> 
           <version>0.6.4</version> 
          </plugin> 
         </plugins> 
         <extension>true</extension> 
         <verbose>true</verbose> 
         <disableXmlSecurity>true</disableXmlSecurity> 
         <accessExternalSchema>all</accessExternalSchema> 
         <accessExternalDTD>all</accessExternalDTD> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

回答

0

运行发电目标一次,并注明您的命名空间中的绑定文件,而不是在插件配置封装映射:

<jaxb:bindings 
     xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd" 
     version="2.1"> 

    <jaxb:bindings schemaLocation="a.xsd"> 
     <jaxb:schemaBindings> 
      <jaxb:package name="org.testing.common"/> 
     </jaxb:schemaBindings> 
    </jaxb:bindings> 
    <jaxb:bindings schemaLocation="b.xsd"> 
     <jaxb:schemaBindings> 
      <jaxb:package name="org.testing.b"/> 
     </jaxb:schemaBindings> 
    </jaxb:bindings> 
    <jaxb:bindings schemaLocation="c.xsd"> 
     <jaxb:schemaBindings> 
      <jaxb:package name="org.testing.c"/> 
     </jaxb:schemaBindings> 
    </jaxb:bindings> 

</jaxb:bindings> 
+0

这并没有改变任何东西。 ClassA.java生成两次。下面是每个注释:@ org.testing.common和@XmlType(name =“name =”)生成的@XmlType(name =“ClassA”,namespace =“ANamespace”,propOrder = { “classAFieldName” } ClassA“,namespace =”ANamespace“,propOrder = { ”classAFieldName“ } org.testing.c。生成的问题在于它们都在ANamespace中,包看起来很好。我在编辑中输入回车,它提交了编辑?我如何解决这个问题? – noobjob

+0

您是否删除了_A_和_B_目标执行程序和''配置文件?我不熟悉您使用的插件,但他们的最佳实践页面[警告不要使用“生成包”](https://github.com/highsource/maven-jaxb2-plugin/wiki/Configure-Target-Packages-in-Binding-Files) – teppic

+0

好的,我试过了(删除A和B e xecutions和配置),然后为所有名称空间创建一个绑定文件。有趣的是,所有东西仍然会生成两次,但ClassA/B/C在@XmlType注释中具有Java包名称anamespace/bnamespace/cnamespace和NO名称空间属性。忽略那些文件,我认为Spring不应该被混淆。谢谢你的帮助! – noobjob

相关问题