В настоящее время я мигрирую проект с версии Apache CXF 3.5.7 до 4.1.0, и после миграции моя логика модификации сообщений SOAP прекратила работать. Ошибка, с которой я сталкиваюсь, - это CL - это NULL Exception. Код работал нормально в предыдущей версии, но теперь объект CL кажется нулевым, и я не могу понять, почему. Какие изменения я должен внести, чтобы убедиться, что моя модификация мыла работает правильно в CXF 4.1.0? Любое понимание или предложения будут оценены! < /P>
java.lang.NullPointerException: NullPointerException invoking http://test:4004/se/tm/cc: Cannot invoke "java.net.http.HttpClient.sendAsync(java.net.http.HttpRequest, java.net.http.HttpResponse$BodyHandler)" because "cl" is null
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1452)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1438)
at org.apache.cxf.transport.http.HttpClientHTTPConduit$HttpClientWrappedOutputStream.close(HttpClientHTTPConduit.java:824)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:530)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:441)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:356)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:314)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:334)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:320)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:265)
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:233)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:207)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:159)
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:224)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:312)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:217)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)
< /code>
для кода: < /p>
public class OutPreStreamInterceptor extends AbstractPhaseInterceptor{
public OutPreStreamInterceptor(String phase) {
super(phase);
addBefore(SoapPreProtocolOutInterceptor.class.getName());
}
@Override
public void handleMessage(Message message) {
OutputStream os = message.getContent(OutputStream.class);
boolean isOutbound = message == message.getExchange().getOutMessage()
|| message == message.getExchange().getOutFaultMessage();
String content = getRawContent(message);
String newContent = content;
if (isOutbound) {
InterceptorUtils.CachedStream cs = new InterceptorUtils.CachedStream();
message.setContent(OutputStream.class, cs);
String action = retrieveSOAPAction(message);
if (action.contains("test") ) {
newContent = content.replace("tt", "");
}
if (action.contains("test2")) {
newContent = changeJobId(newContent);
}
if (!StringUtils.equalsIgnoreCase(newContent, content)) {
log.debug("0;Outbound message has been changed: " + newContent);
}
try {
replaceContent(message, newContent, os);
} catch (IOException e) {
log.error("0;Error while replacing outbound message {}", e.getMessage());
throw new RuntimeException("Error while replacing outbound message" + e);
}
} else {
// If necessary, in-bound message may be changed here.
}
}
public static void replaceContent(Message message, String newContent, OutputStream os) throws IOException {
InputStream replaceInStream = new ByteArrayInputStream(newContent.getBytes(StandardCharsets.UTF_8));
IOUtils.copy(replaceInStream, os);
replaceInStream.close();
os.flush();
message.setContent(OutputStream.class, os);
os.close();
}
< /code>
Я пытался проверить внутренние классы и изменения, но не повезло. < /p>
Но если удалить этот пользовательский перехватчик, код работает нормально.
Подробнее здесь: https://stackoverflow.com/questions/793 ... 7-to-4-1-0
Почему моя модификация мыла не работает после миграции с CXF 3.5.7 на 4.1.0? Получение CL - это нулевая ошибка ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Используя CXF 3.5.9, как я могу принудительно изменить тег тела мыла "ns2" в ответе мыла
Anonymous » » в форуме JAVA - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-