我用cxf创建了一个带有xew插件的web服务客户端,用于列表展开
问题是null
列表中的内容消失了.例如:
我有一个List<String>
带有字符串和null
-entry的请求
当请求现在到达服务器时,它只包含字符串而不是null
条目.因此示例列表中只有2个条目.
这里是wsdl的一个例子:
[..]
<!-- the request -->
<xsd:element name="createGroup">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="in0" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="1" name="in1" nillable="true" type="ns2:ArrayOfRole"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
[..]
<!-- the list which will be unwrapped -->
<xsd:complexType name="ArrayOfRole">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="Role" nillable="true" type="xsd:String"/>
</xsd:sequence>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)
我正在使用maven来生成ws客户端
<properties>
<cxf.version>3.0.5</cxf.version>
<jaxbBasic.version>0.6.5</jaxbBasic.version>
</properties>
[..]
<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>src/main/java</sourceRoot>
<defaultOptions>
<bindingFiles>
<bindingFile>${basedir}/jaxbBindings.xml</bindingFile>
<bindingFile>${basedir}/jaxwsBindings.xml</bindingFile>
</bindingFiles> …
Run Code Online (Sandbox Code Playgroud) 我有一个使用Maven构建的CXF JAX-RS应用程序.我正在努力将其转换为Gradle,但使用Ant XJC任务.
当前版本使用了几个扩展,其中一个是"元素包装"插件的副本,另一个是"jaxb-fluent-api".
我尝试将这两个插件的jar放入xjc类路径中,但是当我运行XJC任务时,我得到以下内容:
java.util.ServiceConfigurationError:com.sun.tools.xjc.Plugin:Provider dk.conspicio.jaxb.plugins.XmlElementWrapperPlugin not a subtype
XmlElementWrapperPlugin类扩展了"com.sun.tools.xjc.Plugin".
知道这里发生了什么吗?
如果重要的话,我的xjc插件的Maven配置看起来像这样:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-xjc-plugin</artifactId>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>xsdtojava</goal>
</goals>
<configuration>
<extensions>
<extension>JAXBXMLElementWrapperPlugin:JAXBXMLElementWrapperPlugin:1.0.0</extension>
<extension>net.java.dev.jaxb2-commons:jaxb-fluent-api:2.1.8</extension>
</extensions>
<xsdOptions>
<xsdOption>
<xsd>${basedir}/src/main/resources/schema/serviceCallResults.xsd</xsd>
<packagename>com.att.sunlight.service.domain.serviceCallResults</packagename>
<extension>true</extension>
<extensionArgs>
<extensionArg>-Xxew</extensionArg>
<extensionArg>-summary ${basedir}/target/xew-summary.txt</extensionArg>
<extensionArg>-instantiate lazy</extensionArg>
<extensionArg>-Xfluent-api</extensionArg>
</extensionArgs>
</xsdOption>
</xsdOptions>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这是我的"build.gradle",只有存储库被省略:
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'war'
group = 'SunlightDataService'
version = '1.2.4-SNAPSHOT'
sourceCompatibility = 1.6
targetCompatibility = 1.6
repositories {
...
}
configurations {
jaxb
}
dependencies {
jaxb …
Run Code Online (Sandbox Code Playgroud) 我在这里正在处理相关问题,但我有一个单独的问题.也许这是同一个问题的一部分,但似乎有所不同.
由于我通过Ant任务和外观运行XJC的问题,我现在正尝试使用JDK中的命令行"xjc"工具运行它.
与原始问题一样,我正在尝试使用"Element Wrapper"和"Fluent API"扩展,因此我的命令行如下:
xjc -extension -classpath "lib/jaxb-fluent-api-2.1.8.jar;lib/jaxb-xew-plugin-1.4.jar" -Xxew -summary target/xew-summary.txt -instantiate lazy -Xfluent-api schema/serviceCallResults.xsd
Run Code Online (Sandbox Code Playgroud)
这些基本上与我发送给"cxf-jaxb-plugin"Maven插件的参数相同,该插件已经工作了很长时间.不幸的是,这个"xjc"命令行失败了:
无法识别的参数-Xxew
这可能有什么问题?
我正在使用maven-jaxws-plugin从我的wsdl,schema中生成java类.它不会在生成的类中生成@XmlElementWrapper注释.从这篇文章我明白我需要使用jaxb-xew-plugin但是我无法使用maven-jaxws-plugin.任何帮助,将不胜感激.这是我试过的配置
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<xjcArgs>
<xjcArg>-no-header</xjcArg>
<xjcArg>-Xxew</xjcArg>
<xjcArg>-Xxew:instantiate lazy</xjcArg>
<xjcArg>-Xxew:delete</xjcArg>
</xjcArgs>
<extension>true</extension>
<wsdlDirectory>${basedir}/src/main/resources</wsdlDirectory>
<wsdlFiles>
<wsdlFile>attribute-service.wsdl</wsdlFile>
</wsdlFiles>
<sourceDestDir>${project.build.directory}/generated</sourceDestDir>
<verbose>true</verbose>
<keep>true</keep>
<plugins>
<plugin>
<groupId>com.github.jaxb-xew-plugin</groupId>
<artifactId>jaxb-xew-plugin</artifactId>
<version>1.0</version>
</plugin>
</plugins>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
如果它只能与maven-jaxb2-plugin集成,你可以帮我搞网络服务吗?基本上如何指定wsdl以及如何生成Service类?(使用@WebService注释)
谢谢,
Bhagya
wsimport maven-jaxb2-plugin jax-ws-customization jaxb-xew-plugin
mvn generate-sources
[INFO] Scanning for projects...
[INFO]
[INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBu
ilder with a thread count of 1
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building epay_api 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- jaxws-maven-plugin:2.3:wsimport (wsimport-generate-sources) @ api ---
[INFO] Processing: file:/C:/service.wsdl
[WARNING] Using platform encoding (Cp1256), build is platform dependent!
[INFO] jaxws:wsimport args: [-keep, -s, C:\api\src\main\java, -d, C:\api\target\classes, -verbose, -Xnocompile, -B-debug, -B-no-header, -B-Xxew, -B-Xx
ew:instantiate lazy, -B-Xxew:delete, -B-extension, -B-b C:\api/src/main/res
ources/jaxb_binding.xml, "file:/C:/api/src/main/resources/service.w
sdl"]
[DEBUG] JAXB Compilation started (XmlElementWrapperPlugin.onActivated):
[DEBUG] buildId : 2.2.7 …
Run Code Online (Sandbox Code Playgroud)