Chi*_*hah 25 java xml wcf web-services
我正在使用WCF开发一个可互操作的Web服务,我正在从Java客户端使用它.当我创建代理类时,它生成了所有getter和setter方法以及一个JAXBElement<String>字段.我在JDK API中搜索了这个并找到了构造函数:
JAXBElement(QName name, Class<T> declaredType, Class scope, T value)
Run Code Online (Sandbox Code Playgroud)
我该如何使用这个构造函数?请解释这些参数,如果互联网上有一个描述其用途的好教程,请告诉我.
小智 27
解决这个问题的方法是,你不需要创建一个单独的构造函数来创建一个JAXBElement.可以从objectFactory.create........()方法中检索受尊重的元素.假设您要在响应对象中创建并设置一些值,并且参数是JAXBElement类型的,那么您需要这样做:
someResponseObj.setMyValue(objectFactory.create.......());
/*method name that will be return a JAXBElement in setter()*/
Run Code Online (Sandbox Code Playgroud)
注意:请检查ObjectFactory引用,因为ObjectFactory生成的代码中可能有多个类,因此您需要引用与该类的类关联的确切类.
小智 13
以防万一有人在这里寻找解决方案:通过在绑定文件中将generateElementProperty设置为false,可以仅使用Type而不是使用JAXBElement.
在我的情况下,我使用maven从wsdl生成存根文件.
部分pom文件和绑定文件(在此配置中称为javabindings.xml)
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.2.9</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/wsdl2java/generated-sources/src/main/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/yourWsdlFileOrURL.wsdl</wsdl>
<extraargs>
<extraarg>-verbose</extraarg>
<extraarg>-b</extraarg>
<extraarg>${basedir}/src/main/resources/javabindings.xml</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
<jaxb:bindings version="2.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jaxb:bindings schemaLocation="http://localhost:15002/MiddlewareDataServiceConversion?xsd=xsd0">
<jaxb:bindings node="/xs:schema">
<jaxb:globalBindings generateElementProperty="false"/>
</jaxb:bindings>
</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)
dig*_*age 13
我只是在做同样的事情,使用Java客户端来共享WCF Web服务.我正在使用jaxws maven插件来生成客户端代码.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<configuration>
<packageName>com.package1</packageName>
<sourceDestDir>src/main/java</sourceDestDir>
<wsdlDirectory>src/main/resources</wsdlDirectory>
<wsdlFiles>
<wsdlFile>wcf_webservice.wsdl</wsdlFile>
</wsdlFiles>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
您应该有一个ObjectFactory类com.package1,您可以使用它来为您创建JAXBElements,例如:
ObjectFactory factory = new ObjectFactory();
MyObject myObject = new MyObject();
JAXBElement<MyObject> elem = factory.createMyObject(myObject);
Run Code Online (Sandbox Code Playgroud)
就像旁注一样,你需要在jaxws使用之前展平wcf wsdl.
小智 5
在我寻找相同的答案时,我偶然发现了这个问题.我发布了一个答案,但发现了一些问题.这是一种方法:
new javax.xml.bind.JAXBElement(
new javax.xml.namespace.QName("http://locationOfURI", "nameOfElement"),
javax.xml.bind.JAXBElement.class,
null, what your object's value is );
Run Code Online (Sandbox Code Playgroud)
最后一个意味着类型参数JAXBElement.
希望这有效.
第一个参数名称是您正在镜像的 XML 元素的限定名称(本地名称 + 名称空间)。
clarifiedType是您将 XML 元素绑定到的类的类对象。
scope是 XML 元素的使用范围,但您可以将其设置为 null。
value是declaredType类的实例,即绑定到实际XML元素实例的实际Java对象。
| 归档时间: |
|
| 查看次数: |
65737 次 |
| 最近记录: |