Я пытаюсь перенести проект Java / SOAP в Java 11. Этот проект использует WSS4j 1.6.7. Это сервлет, который пытается проверить входящие SOAP сообщения, но с Java 11 он не может проверить. InputStream - это сообщение SOAP, и оно работает под Java 8 с тем же сообщением, поэтому проблема не возникает.
MimeHeaders headers = new MimeHeaders();
message = getMessageFactory().createMessage(headers, inputStream);
Когда я запускаю этот код, я вижу это:
SEVERE - SAAJ0532: Absent Content-Type
Я думал, что смогу подделать заголовок и обойти это, используя это:
MimeHeaders headers = new MimeHeaders();
headers.addHeader("Content-Type", "text/xml");
message = getMessageFactory().createMessage(headers, inputStream);
Но результат хуже:
java.lang.ClassNotFoundException: org.apache.xerces.xni.NamespaceContext
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at com.sun.xml.messaging.saaj.soap.name.NameImpl.<init>(NameImpl.java:60)
at com.sun.xml.messaging.saaj.soap.name.SOAP1_1Name.<init>(NameImpl.java:394)
at com.sun.xml.messaging.saaj.soap.name.Envelope1_1Name.<init>(NameImpl.java:405)
at com.sun.xml.messaging.saaj.soap.name.NameImpl.createEnvelope1_1Name(NameImpl.java:253)
at com.sun.xml.messaging.saaj.soap.ver1_1.Envelope1_1Impl.<init>(Envelope1_1Impl.java:25)
at com.sun.xml.messaging.saaj.soap.impl.ElementFactory.createNamedElement(ElementFactory.java:74)
at com.sun.xml.messaging.saaj.soap.impl.ElementFactory.createElement(ElementFactory.java:51)
at com.sun.xml.messaging.saaj.soap.SOAPDocumentImpl.createElementNS(SOAPDocumentImpl.java:133)
at com.sun.xml.messaging.saaj.soap.SOAPPartImpl.createElementNS(SOAPPartImpl.java:345)
at java.xml/com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM.startElement(SAX2DOM.java:159)
at java.xml/com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.closeStartTag(ToXMLSAXHandler.java:206)
at java.xml/com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.characters(ToXMLSAXHandler.java:526)
at java.xml/org.xml.sax.helpers.XMLFilterImpl.characters(XMLFilterImpl.java:588)
at org.apache.xerces.parsers.SAXParser.characters(SAXParser.java:1579)
at org.apache.xerces.validators.common.XMLValidator.processWhitespace(XMLValidator.java:998)
at org.apache.xerces.readers.UTF8Reader.scanContent(UTF8Reader.java:2248)
at org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispatch(XMLDocumentScanner.java:1094)
at org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.java:381)
at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098)
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.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:63)
at com.sun.xml.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelopeFromSource(SOAPPart1_1Impl.java:34)
at com.sun.xml.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:82)
at com.sun.xml.messaging.saaj.soap.SOAPPartImpl.getDocumentElement(SOAPPartImpl.java:280)
at org.apache.ws.security.util.WSSecurityUtil.getSecurityHeader(WSSecurityUtil.java:94)
at org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:249)
at org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:208)
Я новичок к этому проекту и не знаю, если версия WSS4j несовместима с Java 11, или я пропускаю .jars, которые мне нужно включить. Я пробовал много вариантов saaj-impl и xerces, но ничего не изменилось. Кто-нибудь сталкивался с этим? Есть ли список .jars с версиями, которые я могу использовать для Java 11, которые будут работать?
ОБНОВЛЕНИЕ Мне удалось устранить эти ошибки. Во-первых, я обновил библиотеку wssj4j с 1.6.7 до 1.6.19, из-за чего проверка Content-Type перестала работать. Кроме того, дальнейшие ошибки были смягчены путем использования Axis2, как обычно описано в этом вопросе .