javax.xml.bind.JAXBException: не содержит ObjectFactory.class или jaxb.index

У меня есть веб-приложение Java Spring, которое мне нужно использовать в качестве клиента SOAP.

Я использую Maven, и у меня есть основной модуль (WAR) с моим пользовательским кодом и дочерний модуль (зависимость JAR) с сгенерированными классами WSDL (у меня два WSDL).

Как видно из названия, когда я запускаю приложение, возникает ошибка

javax.xml.bind.JAXBException: doesn't contain ObjectFactory.class or jaxb.index

Это ApplicationContext.xml основного модуля:

<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"/>

    <bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
        <constructor-arg ref="messageFactory"/>
        <property name="marshaller" ref="marshaller" />
        <property name="unmarshaller" ref="marshaller" />          
        <property name="interceptors">
            <list>
                <ref bean="wsSecurityInterceptor" />
            </list>
        </property>
    </bean>

    <bean id="wsSecurityInterceptor" class="org.springframework.ws.soap.security.wss4j2.Wss4jSecurityInterceptor">
        <property name="securementActions" value="UsernameToken" />
        <property name="securementUsername" value="xxx" />
        <property name="securementPassword" value="xxxx" />
        <property name="securementPasswordType" value="PasswordText" />
    </bean>

    <bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">        
        <property name="contextPaths">
            <list value-type="java.lang.String">
                <value>my.package.path.wsdl</value>                
                <value>my.package.path.wsdlserver</value>
            </list>
        </property>
    </bean>

в дочерний модуль классы WSDL генерируются правильно, и два класса ObjectFactory.class присутствуют в каждом пакете:

my.package.path.wsdl
my.package.path.wsdlserver

Ошибка возникает во время бина маршаллера:

    Error creating bean with name 'marshaller' defined in ServletContext resource
...
javax.xml.bind.JAXBException: "my.package.path.wsdl" doesn't contains ObjectFactory.class or jaxb.index

Я нашел несколько потоков об этой проблеме, но я не могу понять проблему в моем случае из-за того, что ObjectFactory.class являются подарками (автоматически созданными maven-jaxb2-plugin.

Заранее спасибо за вашу поддержку и извините за мой английский.

1 ответ

Хорошо, я решил изменить определение бина Marshaller следующим образом:

<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="packagesToScan">
      <list>
         <value>my.package.path.wsdl</value>                
         <value>my.package.path.wsdlserver</value>
      </list>
    </property>
</bean>

Мне нужно было перейти от свойства contextPaths к пакетам ToScan

Другие вопросы по тегам