Java 是否可以使用CXF生成可序列化的类?
我使用ApacheCXF从WSDL文件生成类,但它们没有实现将对象放入JMS队列所需的Serializable。是否可以这样做,或者我必须将生成的类转换为我自己的类并发送这些类?我自己找到了解决方案,因此,如果将来有人需要它,就在这里:Java 是否可以使用CXF生成可序列化的类?,java,serialization,cxf,Java,Serialization,Cxf,我使用ApacheCXF从WSDL文件生成类,但它们没有实现将对象放入JMS队列所需的Serializable。是否可以这样做,或者我必须将生成的类转换为我自己的类并发送这些类?我自己找到了解决方案,因此,如果将来有人需要它,就在这里: 1。将此插件添加到pom.xml <plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</arti
1。将此插件添加到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>
<?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。运行“mvn生成源代码”
一个更简单版本的bindings.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>
<?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>
<?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>
只有当您的wsdl具有单个模式时,使用根元素绑定文件才能使用jaxb:globalBindings。问题是jaxb:globalBindings是全局的,因此不能多次指定它
如果是这种情况,您可以将以下绑定文件与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>
请注意,您需要对binding.xml文件进行一些更改。1.将第2行中的
Send.wsdl
调出到您的wsdl的名称,然后调出第2行。按照建议,将第8行中的节点
属性替换为目标名称空间中的任何名称空间