在使用cxf或者x-fire进行webservice开发时,从wsdl文件生成客户端代码时,如果有属性的类型是String,可能会出现JAXBElement<String>类型。
为什么webservice客户端不直接使用String,而使用JAXBElement<String>类型,自然是有原因的,是因为服务器端的wsdl文件有nillable="true"这个属性。
此时有两种方法对这个JAXBElement<String>类型赋值。
1.
User user = new User();
JAXBElement<String> name = new JAXBElement<String>(new QName("http://memberService", "username"), String.class, "smallnest");
user.setUsername(name);
使用这种方法时,有很多人发现客户端的数据确实存入了,可是到了服务器端,通过.getUsername().getValue()调用时,却是null,原因就是Qname值不对!注意,在生成的客户端代码里有private static final QName SERVICE_NAME = new QName("xxx","xx");
并不是这个QName,真正的Qname要去ObjectFactory.java文件去找。只要QName写对,这种调用方法是可以的。
2.当然,还有一种更简单的方法,直接使用ObjectFactory这个类来调用:
User user = new User();
ObjectFactory objFac=new ObjectFactory();
JAXBElement<String> name = objFac.createUserUsername("smallnest");
user.setUsername(name);
这样就简便多了。
分享到:
相关推荐
cxf生成客户端 服务端代码
### CXF生成WS客户端代码详解 #### 一、概述 CXF(Camel-XML-Fuery)是一款开源框架,支持开发和维护基于SOAP、REST等协议的服务。它提供了强大的工具集来简化服务的创建、发布及消费过程。其中,“wsdl2java”...
<groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.x.y</version> </dependency> </dependencies> ``` 这里的`3.x.y`应替换为当前最新的CXF版本。 接下来...
<groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-core</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-...
<groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.x.y</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-...
<groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.1.15</version> </dependency> ``` 2. 创建客户端配置:在CXF客户端中,我们需要创建一个`JaxWsProxyFactoryBean...
3. 创建客户端实例:生成的代码中会包含一个客户端接口,你需要创建这个接口的实现类实例来调用Web服务。例如: ```java JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass...
<groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.1.7</version> </dependency> <!-- CXF webservice --> <dependency> <groupId>org.spring...
<groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-...
1. **定义数据模型**:创建对应的Java类,如`ComplexObject`,其中包含List<Map<String, String>>字段。 2. **创建服务接口**:定义一个服务接口,声明接受List<Map<String, String>>参数的方法。 3. **实现服务逻辑...
<groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.4.4</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-...
<sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot> <wsdlOptions> <wsdlOption> <wsdl>${basedir}/src/main/resources/HelloWorld.wsdl</wsdl> </wsdlOption> </wsdlOptions> </...
<groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>${cxf.version}</version> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase...
<sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot> <wsdlOptions> <wsdlOption> <wsdl>${basedir}/src/main/resources/your.wsdl</wsdl> </wsdlOption> </wsdlOptions> </...
其中,`<output_directory>`是你希望生成代码的目录,`<wsdl_file>`是你的WSDL文件路径。 3. **编译生成的代码**:将生成的Java源代码编译成字节码,放入你的项目类路径中。如果你使用的是IDE,可以直接导入这些源...
3. **生成客户端代码**:使用CXF的wsdl2java工具,将ONVIF服务的WSDL文件转换为Java客户端代码。这个过程会生成一系列的Java类,包括服务代理和服务接口。命令行示例: ``` wsdl2java -d src/main/java -client ...
当我们谈论“自动生成”CXF客户端时,通常是指利用IDE中的功能,根据服务的WSDL(Web Service Description Language)文档,自动生成对应的客户端代码。在MyEclipse这样的IDE中,这个过程相当直观。以下是具体步骤:...
<groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.4.4</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-...
客户端可以通过WSDL地址(通常是`http://yourserver/context-path/services/MyWebService?wsdl`)自动生成对应的Java客户端代码,例如在Eclipse中使用`wsimport`工具。 总结来说,Spring3与CXF的整合提供了便捷的...