Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXWS:如何更改外部XSD中定义的CXF生成的类名称?_Java_Wsdl_Cxf Codegen Plugin - Fatal编程技术网

Java JAXWS:如何更改外部XSD中定义的CXF生成的类名称?

Java JAXWS:如何更改外部XSD中定义的CXF生成的类名称?,java,wsdl,cxf-codegen-plugin,Java,Wsdl,Cxf Codegen Plugin,我试图更改从wsdl生成的类的名称(我不想直接修改任何wsdl或xsd文件)。问题是它的定义在一个单独的xsd文件中 wsdl的结构如下所示: main.wsdl: <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://foo.bar/zee"> <wsdl:impor

我试图更改从wsdl生成的类的名称(我不想直接修改任何wsdl或xsd文件)。问题是它的定义在一个单独的xsd文件中

wsdl的结构如下所示:

main.wsdl:

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://foo.bar/zee">
<wsdl:import location="typedef.wsdl" namespace="http://foo.bar/wee">
</wsdl:import>
    ...
</wsdl:definitions>
我已经尝试了我想到的一切,但仍然没有成功。 有人知道怎么做吗

PS:为了生成类,我使用maven cxf codegen plugin,并在pom.xml中进行以下配置:

<build>
    <finalName>${project.groupId}.${project.artifactId}</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <version>2.7.0</version>
        <executions>
          <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
              <sourceRoot>${project.build.directory}/generated-sources</sourceRoot>
              <wsdlOptions>
                <wsdlOption>
                  <wsdl>http://127.0.0.1:8431/Foo/main.wsdl</wsdl>
                  <extraargs>
                    <extraarg>-client</extraarg>
                  </extraargs>
                  <bindingFiles>
                    <bindingFile>jaxws_bindings.xml</bindingFile>
                  </bindingFiles>
                </wsdlOption>
              </wsdlOptions>
            </configuration>
            <goals>
              <goal>wsdl2java</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
</build>

${project.groupId}.${project.artifactId}
org.apache.cxf
cxf-codegen插件
2.7.0
生成源
生成源
${project.build.directory}/生成的源
http://127.0.0.1:8431/Foo/main.wsdl
-客户
jaxws_bindings.xml
wsdl2java

我是根据我的经验得出这个结论的

虽然这适用于XJC:

<jaxb:bindings
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    version="1.0">
  <jaxb:bindings schemaLocation="..."
                 node="/xsd:schema/xsd:element[@name='Bar']">
    <jaxb:class name="Foo"/>
  </jaxb:bindings>
</jaxb:bindings>

您需要在CXF中使用此功能:

<jaxb:bindings
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    version="1.0">
  <jaxb:bindings schemaLocation="..."
                 node="/xsd:schema/xsd:complexType[@name='Case']">
    <jaxb:class name="Wat" implClass="bar"/>
  </jaxb:bindings>
</jaxb:bindings>

区别在于
元素
复合类型

[ERROR] Failed to execute goal org.apache.cxf:cxf-codegen-plugin:2.7.0:wsdl2java (generate-sources) on
project foo: Execution generate-sources of goal org.apache.cxf:cxf-codegen-plugin:2.7.0:wsdl2java failed:
file:/E:/sources/.../jaxws_bindings.xml [8,95]: "http://127.0.0.1:8431/Foo/FooBar.xsd" is not a part of 
this compilation. Is this a mistake for "http://127.0.0.1:8431/Foo/FooBar.xsd"? -> [Help 1]
<build>
    <finalName>${project.groupId}.${project.artifactId}</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <version>2.7.0</version>
        <executions>
          <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
              <sourceRoot>${project.build.directory}/generated-sources</sourceRoot>
              <wsdlOptions>
                <wsdlOption>
                  <wsdl>http://127.0.0.1:8431/Foo/main.wsdl</wsdl>
                  <extraargs>
                    <extraarg>-client</extraarg>
                  </extraargs>
                  <bindingFiles>
                    <bindingFile>jaxws_bindings.xml</bindingFile>
                  </bindingFiles>
                </wsdlOption>
              </wsdlOptions>
            </configuration>
            <goals>
              <goal>wsdl2java</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
</build>
<jaxb:bindings
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    version="1.0">
  <jaxb:bindings schemaLocation="..."
                 node="/xsd:schema/xsd:element[@name='Bar']">
    <jaxb:class name="Foo"/>
  </jaxb:bindings>
</jaxb:bindings>
<jaxb:bindings
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    version="1.0">
  <jaxb:bindings schemaLocation="..."
                 node="/xsd:schema/xsd:complexType[@name='Case']">
    <jaxb:class name="Wat" implClass="bar"/>
  </jaxb:bindings>
</jaxb:bindings>