У меня должна быть интеграция с конечной точкой SOAP, мне было интересно, если я что-то упустил, анализируя str в контроллере отдыха, как это:
@Autowired
private Jaxb2Marshaller marshaller;
@RequestMapping(value = "/pnr", method = RequestMethod.POST)
public void pnrXML(@RequestBody String pnr) throws IOException, JAXBException {
pnr = pnr.substring(pnr.indexOf("<TravelReservationRequest "));
pnr = pnr.substring(0, pnr.indexOf("</soap:Body>"));
TravelReservationRequest travelReservationRequest = unmarshallXml(new ByteArrayInputStream(pnr.getBytes()));
logger.info(travelReservationRequest.toString());
}
public TravelReservationRequest unmarshallXml(final InputStream xml) throws JAXBException {
return (TravelReservationRequest) marshaller.unmarshal(new StreamSource(xml));
}
и вот бин конфигурации:
@Bean
public Jaxb2Marshaller jaxb2Marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(new Class[]{
TravelReservationRequest.class });
marshaller.setMarshallerProperties(new HashMap<String, Object>() {{
put(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, true);
}});
return marshaller;
}
Вышеупомянутый код работает, просто хочу убедиться, что я ничего не нарушаю, я просто не хочу добавлять избыточную конечную точку SOAP, если я могу сделать это с простым контроллером REST