创建Dispatch对象,该对象用于调用Web服务操作。Dispatch对象在功能上等同于JAX-RPC中的Call对象(与DII编程模型一起使用)。
通过XML文档创建有效负载。这违背了“为各个元素实例化一个对象”的实践,JAX-RPC需要这样。
调用Web服务操作。此外需要格外小心,因为“操作名称”包装器元素并不会自动添加。如果服务端点需要一个,则需要自己添加。
使用JAXP转换类将响应从Web服务操作编组到java.io.ByteArrayOutputStream中。您可以处理所需的一切内容(比如说byte[]、String和XML)。同样,这远没有在JAX-RPC中处理JavaBean图(或javax.xml.soap.SOAPElement对象)费力。
以上是整个步骤的总结。希望您可更好的理解如何在WebLogic Server 10中使用JAX-WS 2.0和JAXB 2.0实现。这些实现中的API即可以在服务提供者端使用,也可以在服务用户端使用。请查看我所提供的示例代码,您会发现其中没有使用(或导入)任何特定于WebLogic的类。这表示该代码是完全可移植的,并且应该能够在Axis2上编译,而无需对代码(或定制文件)进行任何修改。但是,您需要修改build.xml文件,使JAX-WS和JAXB实现使用Axis2所使用的.jar文件。还需要修改用于JAX-WS、JAXB和部署的Ant任务。
一些最佳实践
以下列出了在WebLogic Server 10中使用JAX-WS和JAXB 实现的一些最佳实践:
避免在代码中使用特定于供应商的注释。这样在尝试不同供应商的JAX-WS实现时就无需对代码进行修改。通常,JAX-WS实现供应商都提供了在Ant任务中访问特定于供应商注释的方法。WebLogic Server使用的是这一选项,因此您应该利用这一特性,以避免在JWS中使用特定于供应商的注释。
在可能的地方使用JAXP StreamSource和 and StreamResult。javax.xml.transform.stream.StreamSource和javax.xml.transform.stream.StreamResult所类提供的方法可以最有效地处理Java串行化(和并行化)问题。因此,您应该尽可能地使用它们。
缓存JAXBContext对象。javax.xml.bind.JAXBContext对象是一个用于通过Java类创建JAXB对象的工厂。创建JAXBContext对象需要的开销比较大,因此应该缓存它们从而便于重用。
使用JAXBElement编组内部类。JAXB 2.0将使用内部类用于匿名complexType元素。如果您之后在Web服务操作的方法签名中使用其中某个元素,那么将在构建时接收到一个javax.xml.bind.MarshalException异常。问题是内部类并不是高级元素,因此并没有@XmlRootElement注释。解决的方法是为内部类创建一个JAXBElement对象。要了解如何创建该对象,请在DataStagingServiceImpl.java文件中搜索"JAXBElement"。
文章来源于领测软件测试网 https://www.ltesting.net/