Is it possible to generate serializable classes with CXF?

后端 未结 3 718
无人及你
无人及你 2020-12-31 09:30

I\'m using Apache CXF to generate classes from a WSDL file but they don\'t implement Serializable which is needed to put an object into a JMS queue. Is it possible to do thi

相关标签:
3条回答
  • 2020-12-31 09:58

    A simpler version of bindings.xml, which make sure that all generated files are implementing 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>
    
    0 讨论(0)
  • 2020-12-31 10:03

    Binding files with <jaxws:bindings> root element work with jaxb:globalBindings only if your wsdl has a single schema. The problem is that jaxb:globalBindings is global so it can not be specified more than once.

    If that is your case you can use the following bindings file with jaxb:bindings:

    <?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>
    
    0 讨论(0)
  • 2020-12-31 10:20

    I found the solution myself so here it is if anybody needs it in the future:

    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'

    0 讨论(0)
提交回复
热议问题