2011-08-10 72 views

回答

13

我找到了解决自己,所以这里是如果有人需要它的未来:

1. add this plugin to pom.xml

<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> 
       <sourceRoot>${basedir}/src/main/java</sourceRoot> 
       <wsdlRoot>${basedir}/src/main/resources</wsdlRoot> 
       <includes> 
        <include>*Service.wsdl</include> 
       </includes> 
       <wsdlOptions> 
        <wsdlOption> 
         <wsdl>${basedir}/src/main/resources/your_wsdl.wsdl</wsdl> 
         <extraargs> 
          <extraarg>-client</extraarg> 
          <extraarg>-impl</extraarg> 
          <extraarg>-server</extraarg> 
          <extraarg>-verbose</extraarg> 
          <extraarg>-validate</extraarg> 
         </extraargs> 
         <bindingFiles> 
          <bindingFile>${basedir}/src/main/resources/binding.xml</bindingFile> 
         </bindingFiles> 
        </wsdlOption> 
       </wsdlOptions> 
      </configuration> 
      <goals> 
       <goal>wsdl2java</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

2. write a custom binding (binding.xml)

<?xml version="1.0" encoding="UTF-8"?> 
<jaxws:bindings wsdlLocation="Send.wsdl" 
    xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 
    <jaxws:bindings 
     node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://wsdl/SendService.wsdl']"> 
     <jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
      <jxb:serializable uid="11082011"/> 
     </jxb:globalBindings> 
    </jaxws:bindings> 
</jaxws:bindings> 

3. run 'mvn generate-sources'

+2

请注意,你需要做一些修改到您的binding.xml文件。 1.将第2行中的Send.wsdl替换为您的WSDL所指定的任何名称,2.将第8行中的node属性替换为您的目标名称空间所在的位置,如[建议](http:// markmail。组织/消息/ aw52wgp6bdpwo5rx) –

4

一个简单的版本bindings.xml,这确保所有生成的文件都实现Serializable接口:

<?xml version="1.0" encoding="UTF-8"?> 
<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" 
    elementFormDefault="qualified" attributeFormDefault="unqualified" 
    jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.1"> 
    <xs:annotation> 
     <xs:appinfo> 
      <jaxb:globalBindings> 
       <xjc:serializable /> 
      </jaxb:globalBindings> 
     </xs:appinfo> 
    </xs:annotation> 
</xs:schema> 
4

绑定文件与< JAXWS:绑定与JAXB >根元素的工作:globalBindings只有你的wsdl只有一个模式。问题是,jaxb:globalBindings是全局的,所以它不能被指定多次。

如果这是你的情况下,你可以使用下面的绑定与JAXB文件:绑定:

<?xml version="1.0" encoding="UTF-8"?> 
<jaxb:bindings version="1.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"> 
    <jaxb:globalBindings> 
     <jaxb:serializable uid="1"/> 
    </jaxb:globalBindings> 
</jaxb:bindings> 
相关问题