0

Question

How can I inject a bean containing a list generated by JAXB ?

Detail

  • These lists have no setters.
  • You populate them through getMyList().getList().add(stuff); For standard java Collections, you usually rely on spring-utils, but Spring does not support these JAXB lists.
    Message: no matching editors or conversion strategy found

Context

  • WSDL-first - CXF server
  • mock responses are pulled from Spring Application context files

Hints

I'm reluctant to introduce a second JAXB runtime just for the sake of mock response, especially considering this will involve generating a slew of new classes to model my domain objects (i.e. thereby duplicating the objects generated by wsdl2java).

4

2 回答 2

0

我的解决方案:

我最终使用了 eclipselink MOXy。

MOXy 的选择是由以下特点驱动的

  • MOXy 允许在 CXF 生成的类之外声明根元素。这样就不需要干扰这些类。

  • MOXy 作为一个 JAXB 实现在处理 JAXB 填充列表的方式(没有设置器)方面没有问题。

评论:

  • MOXy XPath 支持仍然很弱。我需要从整个 XML 文件(可能的模拟响应列表)中访问特定的 XML 元素(响应),并希望我可以根据 XPath 谓词仅解组此 XML 文件的一部分,但目前尚不支持(在 2.5 中)。计划为 2.6 提供支持。

  • 我没有使用任何 Spring JAXB 前端作为 MOXy 的外观,因为我的 Mock SEI 已经通过 Spring 注入。

  • 使用 MOXy 被证明是一种愉快的体验,并且很容易上手。

  • 我没有遇到 MOXy 作为 JAXB 有效负载 jar 与 CXF 将 JDK JAXB 实现用于其 SOAP 层的方式之间的任何冲突。

于 2013-08-16T13:57:05.073 回答
0

尝试为列表创建一个 Bean:

<bean id="list" class="java.util.ArrayList">
    <constructor-arg>
        <list>
            <ref bean="element1" />
            <ref bean="element2" />                
        </list>
    </constructor-arg>
</bean>

然后使用 A$B 语法为内部类创建一个 bean:

<bean id="myList" class="myPackage.MyOuterClass$MyList"  >
    <property name="list" ref="list" />
</bean>

最后是 OuterClass Bean:

<bean id="myOuterClass" class="myPackage.MyOuterClass"  >
    <property name="myList" ref="myList" />
</bean>
于 2013-08-07T13:37:00.397 回答