【问题标题】:Spring OXM 3 + JiBXException: No marshaller defined for classSpring OXM 3 + JiBXException:没有为类定义编组器
【发布时间】:2012-06-20 14:01:10
【问题描述】:

我在我的应用程序中使用了 Spring OXM 和 JiBX。

下面是我的 Spring 配置文件

<context:component-scan base-package="com.controller"/>

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

<oxm:jibx-marshaller target-class="com.request.RequestClass" id="rqMarshaller"/>
<oxm:jibx-marshaller target-class="com.response.ResponseClass" id="rsMarshaller"/>

<bean id="xmlViewer" class="org.springframework.web.servlet.view.xml.MarshallingView">
    <constructor-arg ref="rsMarshaller" />
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver"/>

下面是控制器类

@Controller
public class MyController {
    @Autowired
    private JibxMarshaller rqMarshaller;

    @RequestMapping(value = "/myrequest", method = RequestMethod.POST)
    public ModelAndView searchFlights(@RequestBody String request) {
        System.out.println("Inside");
        System.out.println("request = "+request);
        Source source = new StreamSource(new StringReader(request));

        RequestClass rq = null;
        try {
            rq = (RequestClass) rqMarshaller.unmarshal(source);
        } catch (XmlMappingException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }

        ResponseClass e = new ResponseClass();
        e.setVersion("2.0");

        Orig ond = new Orig();
        ond.setCode("AIT");

        e.getOrig().add(ond);
        return new ModelAndView("xmlViewer","object",e);
    }
}

当我发送 XML 请求时,它已成功编组,但为了响应,我收到以下错误消息。

org.jibx.runtime.JiBXException: No marshaller defined for class com.response.ResponseClass

我已经在 spring 配置文件中为ResponseClass定义了编组器。

请帮忙。谢谢。

【问题讨论】:

    标签: spring-ws spring-3 jibx spring-oxm


    【解决方案1】:

    终于找到解决办法了!!!

    注册JiBxMarshaller时需要指定bindingName属性。

    <oxm:jibx-marshaller target-class="com.request.RequestClass" id="rqMarshaller" bindingName="rqBinding"/>
    <oxm:jibx-marshaller target-class="com.response.ResponseClass" id="rsMarshaller" bindingName="rsBinding/>
    

    并在 JiBX 的相应绑定/映射文件中指定相同的名称。

    就是这样!

    【讨论】:

    • 我的代码中的配置是正确完成的。我能够获取记录,但是当我在很短的时间内多次调用服务时,我不断收到此异常。
    猜你喜欢
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 2011-07-29
    • 2023-03-31
    • 2016-09-01
    相关资源
    最近更新 更多