【问题标题】:Specify a package instead of "classesToBeBound" for spring Jaxb2Marshaller为 spring Jaxb2Marshaller 指定一个包而不是“classesToBeBound”
【发布时间】:2012-01-30 17:04:32
【问题描述】:

我正在尝试使用 Jaxb2Marshaller 来编组一组使用 spring 的 java 类。我知道这可以使用以下代码完成

<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="classesToBeBound">
        <list>
            <value>com.example.test1</value>
            <value>com.example.test2</value>
        </list>
    </property>
</bean>  

我想做的不是指定一个类列表,而是指定包含所有类的包名(在上面的例子中是 com.example)。

有没有人知道这样做的方法,或者任何其他不需要我列出所有类的方法。任何帮助将不胜感激!

谢谢。

【问题讨论】:

    标签: java spring jaxb2


    【解决方案1】:

    从 Spring 3.1(我认为)您还可以使用接受通配符的 packagesToScan 属性。它只是不适用于没有 @XmlRootElement 注释的元素,就像 contextPath 属性一样。这些需要生成对象工厂。

    可能看起来像:

    <property name="packagesToScan">
        <list>
            <value>com.test.*</value>
            <value>com.*.test</value>
        </list>
    </property>
    

    【讨论】:

    【解决方案2】:

    您可以使用以下语法设置 contextPath:

    <bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="contextPath" value="com.example"/>
    </bean>  
    

    【讨论】:

      【解决方案3】:

      如果您使用的是新版本的 JAXB,那么如果您将 oxm 命名空间添加到您的 xml 文件,则在您的应用程序上下文中使用 you can use something like this

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:oxm="http://www.springframework.org/schema/oxm"
             xsi:schemaLocation="
                 http://www.springframework.org/schema/beans 
                 http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                 http://www.springframework.org/schema/oxm
                 http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd">
        <oxm:jaxb2-marshaller id="jaxbMarshaller" contextPath="com.example"/>
        <!-- other beans -->
      </beans>
      

      我有一个使用这些运行的生产级程序,所以如果您还有任何问题,请告诉我。

      祝你好运。

      【讨论】:

      • 谢谢!这不需要我在 com.yourcompany.yourapp.foo 中包含 jaxb.in​​dex 文件吗?
      • 你说的索引文件是什么?我的项目中没有任何类型的文件。里面有什么样的信息?
      • 我运行了一个小测试,我得到了以下异常:嵌套异常是 javax.xml.bind.JAXBException:“com.yourcompany.yourapp.foo”不包含 ObjectFactory.class 或 jaxb.in​​dex。这导致我stackoverflow.com/questions/899668/…
      • 嗯,您使用的是哪个版本的 JAXB?对我来说,以上就是我在 xml 文件中生成源代码的全部内容。但是,我的 WEB-INF 或资源文件夹中确实有我的 xsd 文件(抱歉刚刚离开办公室,不再可以访问我的源代码)。
      • 哦,等等,您知道您必须首先使用 maven xjc 插件让 JAXB 生成类。这将生成带有 JAXB 所需的所有注释以及 ObjectFactory 的 java 源代码。类文件。或者您可以自己进行注释,但这确实违背了使用 JAXB 的初衷。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      相关资源
      最近更新 更多