Unmarshalling SOAP-сообщение в Spring REST-контроллере - PullRequest
0 голосов
/ 17 июня 2019

У меня должна быть интеграция с конечной точкой 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

...