Кто-нибудь сталкивался с этой проблемой при обновлении версий CXF? Какие изменения мне следует внести, чтобы моя модификация SOAP работала корректно в CXF 4.1.0? Будем признательны за любые идеи и предложения!
Код: Выделить всё
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)Код: Выделить всё
`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();
}`
Но если удалить этот пользовательский перехватчик, код будет работать нормально.
Подробнее здесь: https://stackoverflow.com/questions/793 ... 7-to-4-1-0
Мобильная версия