Java 可以将jaxb2基础配置为为为泛型对象的类型变量指定接口吗?
我使用jax-ws的wsimport从wsdl生成java类。我正在使用jaxb2基础插件创建toString、equals、hashCode、copy和merge方法 我希望生成的类能够实现接口,以便在需要更改代码时将代码与实现隔离开来 我希望使用jaxb2的能力生成实现指定接口的类,但成功率有限。类实现接口是不够的。我希望由其他生成类组成的生成类在引用这些对象时使用接口而不是实现 我正在使用外部绑定文件定义类应实现的接口:Java 可以将jaxb2基础配置为为为泛型对象的类型变量指定接口吗?,java,jaxb,jax-ws,wsimport,jaxb2-basics,Java,Jaxb,Jax Ws,Wsimport,Jaxb2 Basics,我使用jax-ws的wsimport从wsdl生成java类。我正在使用jaxb2基础插件创建toString、equals、hashCode、copy和merge方法 我希望生成的类能够实现接口,以便在需要更改代码时将代码与实现隔离开来 我希望使用jaxb2的能力生成实现指定接口的类,但成功率有限。类实现接口是不够的。我希望由其他生成类组成的生成类在引用这些对象时使用接口而不是实现 我正在使用外部绑定文件定义类应实现的接口: <jaxws:bindings xmlns:jaxb="ht
<jaxws:bindings
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
wsdlLocation="ExampleService.wsdl"
xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
jaxb:extensionBindingPrefixes="inheritance">
<!-- Person -->
<jaxws:bindings node="wsdl:definitions/wsdl:types/s:schema[@targetNamespace='http://example.com/ws']">
<jaxb:bindings node="//s:complexType[@name='Person']">
<inheritance:implements>com.example.IPerson</inheritance:implements>
</jaxb:bindings>
</jaxws:bindings>
<!-- Bus -->
<jaxws:bindings node="wsdl:definitions/wsdl:types/s:schema[@targetNamespace='http://example.com/ws']">
<jaxb:bindings node="//s:complexType[@name='Bus']">
<inheritance:implements>com.example.IBus</inheritance:implements>
<jaxb:bindings node="//s:element[@name='Driver']">
<jaxb:class ref="com.example.IPerson"/>
</jaxb:bindings>
<!-- How to do this? This doesn't work.
<jaxb:bindings node="//s:element[@name='Passengers']">
<jaxb:class ref="java.util.List<com.example.IPerson>"/>
</jaxb:bindings>
-->
</jaxb:bindings>
</jaxws:bindings>
绑定文件中的内容正在工作
但是,若总线有一个Person对象列表,我就不能让wsimport为总线生成一个类来定义IPerson对象列表
public Class Bus implements IBus {
protected IPerson driver;
protected List<IPerson> passengers;
...
}
公共类总线实现IBus{
受保护的IPerson驱动程序;
受保护名单乘客;
...
}
下面是我使用的wsdl示例(愚蠢的示例,但它能说明问题):
HelloService的WSDL文件
这是我的pom:
<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>jaxws-test</groupId>
<artifactId>jaxws-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>jaxws-test</name>
<dependencies>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>0.6.2</version>
</dependency>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-runtime</artifactId>
<version>0.6.2</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/wsdl</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
<configuration>
<verbose>true</verbose>
<wsdlOptions>
<wsdlOption>
<wsdl>src/main/wsdl/ExampleService.wsdl</wsdl>
<extraargs>
<extraarg>-xjc-Xinheritance</extraarg>
</extraargs>
<bindingFiles>
<bindingFile>src/main/wsdl/ExampleBindings.xml</bindingFile>
</bindingFiles>
</wsdlOption>
</wsdlOptions>
</configuration>
<dependencies>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>0.6.2</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>maven2-repository.java.net</id>
<name>Java.net Repository for Maven</name>
<url>http://download.java.net/maven/2/</url>
<layout>default</layout>
</repository>
</repositories>
</project>
4.0.0
jaxws测试
jaxws测试
0.0.1-快照
jaxws测试
com.sun.xml.ws
jaxws-rt
2.2.3
org.jvnet.jaxb2_commons
jaxb2基础知识
0.6.2
org.jvnet.jaxb2_commons
jaxb2基础运行时
0.6.2
src/main/resources
src/main/wsdl
org.apache.cxf
cxf-codegen插件
2.4.1
生成源
生成源
wsdl2java
真的
src/main/wsdl/ExampleService.wsdl
-xjc新遗传
src/main/wsdl/ExampleBindings.xml
org.jvnet.jaxb2_commons
jaxb2基础知识
0.6.2
maven2-repository.java.net
Maven的Java.net存储库
http://download.java.net/maven/2/
违约
有人知道是否可以让jaxb2 basics生成类型变量在jaxb绑定文件中指定的通用对象吗?没有,目前不可能 更新 这已经在0.6.4中实现
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:ns="http://example.com/ws"
xmlns:s1="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="http://example.com/ws"
name="BusServiceDefinitions">
<types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="qualified"
elementFormDefault="qualified"
targetNamespace="http://example.com/ws">
<xs:element name="BusRequest" type="ns:BusRequest"/>
<xs:element name="BusResponse" type="ns:BusResponse"/>
<xs:complexType name="Bus">
<xs:sequence>
<xs:element name="Driver" type="ns:Person" minOccurs="1" maxOccurs="1"/>
<xs:element name="Passengers" type="ns:Person" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Person">
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="BusRequest">
<xs:sequence>
<xs:element name="person" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="BusResponse">
<xs:sequence>
<xs:element name="bus" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</types>
<message name="BusRequest">
<part name="BusRequest" type="ns:BusRequest"/>
</message>
<message name="BusResponse">
<part name="Bus" type="ns:Bus"/>
</message>
<portType name="Bus_PortType">
<operation name="createBus">
<input message="ns:BusRequest"/>
<output message="ns:BusResponse"/>
</operation>
</portType>
<binding name="Bus_Binding" type="ns:Bus_PortType">
<s1:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="createBus">
<s1:operation soapAction="createBus"/>
<input>
</input>
<output>
</output>
</operation>
</binding>
<service name="Bus_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding="ns:Bus_Binding" name="Bus_Port">
<s1:address
location="http://localhost:8080/soap/servlet/rpcrouter"/>
</port>
</service>
</definitions>
<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>jaxws-test</groupId>
<artifactId>jaxws-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>jaxws-test</name>
<dependencies>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>0.6.2</version>
</dependency>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-runtime</artifactId>
<version>0.6.2</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/wsdl</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
<configuration>
<verbose>true</verbose>
<wsdlOptions>
<wsdlOption>
<wsdl>src/main/wsdl/ExampleService.wsdl</wsdl>
<extraargs>
<extraarg>-xjc-Xinheritance</extraarg>
</extraargs>
<bindingFiles>
<bindingFile>src/main/wsdl/ExampleBindings.xml</bindingFile>
</bindingFiles>
</wsdlOption>
</wsdlOptions>
</configuration>
<dependencies>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>0.6.2</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>maven2-repository.java.net</id>
<name>Java.net Repository for Maven</name>
<url>http://download.java.net/maven/2/</url>
<layout>default</layout>
</repository>
</repositories>
</project>