0

在给定第三方 wsdl 的情况下,我使用 Eclipse 生成了一个 java 客户端代码存根。客户端工作得很好,我可以访问网络服务并做我需要做的事情。

现在,我想编写一些无需连接到 Web 服务即可运行的单元测试。是否可以在axis2堆栈中使用某种机制将xml文件反序列化为java客户端存根代码中的java对象之一?

例如,客户端存根代码中的类之一是“Contact”。假设我有一个 xml 文件,它模仿通常在肥皂请求中找到的 xml。如何将其反序列化为 java Contact 对象?

我以前使用过 XMLBeans,但希望有一种更简单的方法,因为 java 客户端似乎已经在某个地方进行了这种反序列化?也许axis2有一种方法可以获取一大块xml并返回一个java对象?

更新:

我试过这个:

String packageName = Contact.class.getPackage().getName();
JAXBContext jc = JAXBContext.newInstance( packageName );

我明白了:

java.lang.AssertionError: javax.xml.bind.JAXBException: "com.sforce.soap._2006._04.metadata" doesnt contain ObjectFactory.class or jaxb.index

然后,我尝试了这个:

Contact c = new Contact();
JAXBContext jc = JAXBContext.newInstance( c.getClass() );

但是后来我得到了 Contact Class 使用的类之一的异常does not have a no-arq default constructor

我希望这将是一件快速而简单的事情,但在我有时间完全了解axis2以及它如何使用jaxb之前,我将手动解析xml。

4

1 回答 1

1

这在 Axis 中称为“解组”。看看 org.apache.axis2.jaxws.message.databinding.JAXBUtils.getJAXBUnmarshaller(JAXBContext context)。一旦有了解组器,就可以将 XML 反序列化回对象。

于 2011-03-29T21:39:28.807 回答