When attempting to obtain WSDL for the Iti18Service, a StringIndexOutOfBounds exception is generated.
This happens when org.openehealth.ipf.commons.ihe.ws.cxf.payload.InPayloadExtractorInterceptor.handleMessage method calls the extractSoapBody method with an empty string payload. (zero length String)
if (payloadType == PayloadType.SOAP_BODY) {
payload = SoapUtils.extractSoapBody(payload);
}
Even though the exception below is recorded in the log, the processing proceeds and the WSDL for the service is returned.
Do we need to log an error in this case? Is it possible to either have extractSoapBody return immediately in the empty string case or check for that case prior to invoking it?
The CXF trace of this URL is pasted below including the log of the exception generated from an HTTP request to: http://localhost/registry/xds-iti18?wsdl
This was observed using IPF 2.3.1
Thanks,
Michael Ottati
12:04:11.930 [http-bio-80-exec-8] INFO org.apache.cxf.interceptor.LoggingInInterceptor - Inbound Message
----------------------------
ID: 1
Address: http://localhost/registry/xds-iti18?wsdl
Http-Method: GET
Content-Type:
Headers: {Accept=[text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8], accept-encoding=[gzip, deflate], accept-language=[en-us,en;q=0.5], connection=[keep-alive], Content-Type=[null], host=[localhost], referer=[http://localhost/registry/], user-agent=[Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0]}
--------------------------------------
12:04:20.920 [http-bio-80-exec-8] ERROR org.openehealth.ipf.commons.ihe.ws.utils.SoapUtils - Invalid contents, probably not a SOAP Envelope in the parameter
java.lang.StringIndexOutOfBoundsException: String index out of range: -2
at java.lang.String.charAt(String.java:686) ~[na:1.6.0_30]
at org.openehealth.ipf.commons.ihe.ws.utils.SoapUtils.extractSoapBody(SoapUtils.java:144) ~[ipf-commons-ihe-ws-2.3.1.jar:na]
at org.openehealth.ipf.commons.ihe.ws.cxf.payload.InPayloadExtractorInterceptor.handleMessage(InPayloadExtractorInterceptor.java:96) [ipf-commons-ihe-ws-2.3.1.jar:na]
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) [cxf-api-2.4.2.jar:2.4.2]
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) [cxf-rt-core-2.4.2.jar:2.4.2]
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:206) [cxf-rt-transports-http-2.4.2.jar:2.4.2]
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:218) [cxf-rt-transports-http-2.4.2.jar:2.4.2]
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:200) [cxf-rt-transports-http-2.4.2.jar:2.4.2]
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:114) [cxf-rt-transports-http-2.4.2.jar:2.4.2]
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184) [cxf-rt-transports-http-2.4.2.jar:2.4.2]
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:112) [cxf-rt-transports-http-2.4.2.jar:2.4.2]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) [servlet-api.jar:na]
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:163) [cxf-rt-transports-http-2.4.2.jar:2.4.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) [catalina.jar:7.0.21]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.21]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) [catalina.jar:7.0.21]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185) [catalina.jar:7.0.21]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) [catalina.jar:7.0.21]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151) [catalina.jar:7.0.21]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) [catalina.jar:7.0.21]
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) [catalina.jar:7.0.21]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) [catalina.jar:7.0.21]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) [catalina.jar:7.0.21]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269) [tomcat-coyote.jar:7.0.21]
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) [tomcat-coyote.jar:7.0.21]
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300) [tomcat-coyote.jar:7.0.21]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_30]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_30]
at java.lang.Thread.run(Thread.java:662) [na:1.6.0_30]
-- rnd.
Dmytro:
As always, thanks for the quick response.
Can’t go to 2.4 just quite yet. We stagger taking new dependencies until they are at final release.
I will keep my eye out for 2.4.0
Thanks,
Michael