Пружинный ботинок soap с демаршалингом xml со специальными символами - PullRequest
0 голосов
/ 27 января 2020

У меня проблема с пружинной загрузкой soap xml unmarshaling. В настоящее время я использую сервис soap, и все работает нормально, за исключением случаев, когда я получаю исключение из-за специальных символов.

Пример исключения для получения "" - недопустимый символ XML:

020-01-27T22:37:08,175 ERROR [http-nio-8135-exec-2] || o.a.j.l.DirectJDKLog: Servlet.service() for servlet [dispatcherServlet] in context with path [/application-test] threw exception [Request processing failed; nested exception is org.springframework.ws.InvalidXmlException: Could not parse XML; nested exception is org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 416; Character reference "&#x1A" is an invalid XML character.] with root cause
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 416; Character reference "&#x1A" is an invalid XML character.
    at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1243)
    at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
    at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:357)
    at java.xml/com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:687)
    at java.xml/com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:774)
    at java.xml/com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:370)
    at com.sun.xml.messaging.saaj.util.transform.EfficientStreamingTransformer.transform(EfficientStreamingTransformer.java:396)
    at com.sun.xml.messaging.saaj.soap.EnvelopeFactory.parseEnvelopeSax(EnvelopeFactory.java:173)
    at com.sun.xml.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:92)
    at com.sun.xml.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelopeFromSource(SOAPPart1_1Impl.java:55)
    at com.sun.xml.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:142)
    at org.springframework.ws.soap.saaj.SaajSoapMessageFactory.createWebServiceMessage(SaajSoapMessageFactory.java:191)
    at org.springframework.ws.soap.saaj.SaajSoapMessageFactory.createWebServiceMessage(SaajSoapMessageFactory.java:62)

Код класса AppConfig:


@Bean
    public Jaxb2Marshaller marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setContextPath("com.application.test");
        return marshaller;
    }

    @Bean
    public CallerClient callerClient(Jaxb2Marshaller marshaller) {
        CallerClient client = new CallerClient ();
        client.setDefaultUri("service url");
        client.setMarshaller(marshaller);
        client.setUnmarshaller(marshaller);
        client.setMessageSender(webServiceMessageSender());
        ClientInterceptor[] interceptors = { callerInterceptor };
        client.setInterceptors(interceptors);
        return client;
    }

    @Bean
    public WebServiceMessageSender webServiceMessageSender() {
        HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender();
        httpComponentsMessageSender.setConnectionTimeout(3000);
        httpComponentsMessageSender.setReadTimeout(3000);
        return httpComponentsMessageSender;
    }

есть способ получить ответ без каких-либо проблем, приняв специальные символы или удалив их.

...