2012-06-20 3 views
1

Я использовал Spring OXM и JiBX в своем приложении.Spring OXM 3 + JiBXException: маршаллер не определен для класса

ниже моего 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 

Я уже определил маршаллер для ResponseClass весной конфигурационного файла.

помогите пожалуйста. Благодарю.

ответ

0

Наконец-то я понял решение!

При регистрации 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.

Вот и все!

+0

Конфигурация в моем коде выполнена правильно. Я могу получить записи, но я продолжаю получать это исключение, когда я делаю несколько вызовов для службы за очень небольшой промежуток времени. –

Смежные вопросы