cancel
Showing results for 
Search instead for 
Did you mean: 

How to make SOAP/Axis sender CC to accept SOAP request with unspecified charset in HTTP header?

former_member560382
Participant
0 Kudos

Hi guys,

we have a problem as one of our customers sends a SOAP request, which header parameter Content-type is specified only as text/xml, without a charset setting. The adapter does not accept it, Web AS returns a WAS exception.

ANy idea how this could be resolved? The best way to add the value into the HTTP header or how to make the WAS accpet such requests?

Thanks,

Peter

Accepted Solutions (0)

Answers (2)

Answers (2)

former_member560382
Participant
0 Kudos

Seems the problem is in the standard Axis code. We have reported this to SAP, waiting for response.

stefan_grube
Active Contributor
0 Kudos

text/xml does not require a charset setting, as the charset is declared in the XML header. If it is missing in XML header as will, the default UTF-8 is assumed.

What exactly is the error message?

former_member560382
Participant
0 Kudos

Hi Stefan,

that would be also my expectation, however it doesn't work. We're getting following exception, but the truth is we have implemented our own handler.  The thing is, as we add the charset=utf-8, it works perfectly. Any idea?

Cannot process an HTTP request to servlet [MessageServlet] in [XIAxisAdapter] web application.
[EXCEPTION]
java.lang.NullPointerException
at java.lang.String.getBytes(String.java:966)
at com.sap.aii.axis.utils.JavaUtils.removeDTDFromResponse(JavaUtils.java:464)
at com.sap.aii.adapter.axis.web.ServletReceiverCore.doPost(ServletReceiverCore.java:469)
at com.sap.aii.adapter.axis.web.MessageServlet.doPost(MessageServlet.java:392)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:152)
at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:38)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:466)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:210)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:441)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:430)
at com.sap.engine.services.servlets_jsp.filters.DSRWebContainerFilter.process(DSRWebContainerFilter.java:38)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.servlets_jsp.filters.ServletSelector.process(ServletSelector.java:81)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.servlets_jsp.filters.ApplicationSelector.process(ApplicationSelector.java:278)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.WebContainerInvoker.process(WebContainerInvoker.java:81)
at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.DefineHostFilter.process(DefineHostFilter.java:27)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.MonitoringFilter.process(MonitoringFilter.java:29)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.SessionSizeFilter.process(SessionSizeFilter.java:26)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.MemoryStatisticFilter.process(MemoryStatisticFilter.java:57)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.DSRHttpFilter.process(DSRHttpFilter.java:43)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.server.Processor.chainedRequest(Processor.java:475)
at com.sap.engine.services.httpserver.server.Processor$FCAProcessorThread.process(Processor.java:269)
at com.sap.engine.services.httpserver.server.rcm.RequestProcessorThread.run(RequestProcessorThread.java:56)
at com.sap.engine.core.thread.execution.Executable.run(Executable.java:122)
at com.sap.engine.core.thread.execution.Executable.run(Executable.java:101)
at com.sap.engine.core.thread.execution.CentralExecutor$SingleThread.run(CentralExecutor.java:328)

stefan_grube
Active Contributor
0 Kudos

In the class removeDTDFromResponse there is a call of method getBytes with the encoding.

The encoding seems to be taken from HTTP header.

As this is your own header, change the code  in a way, that if the encoding is missing, use default UTF-8. Or use the getbytes method without encoding.

former_member560382
Participant
0 Kudos

Well, according to my colleague who is developing the Java stuff, this method is part of the standard SAP delivery, so no chance to affect it..

stefan_grube
Active Contributor
0 Kudos

Sorry, you wrote you have implemented  your own header.

Anyway, a null pointer is always a program error much must not happen.

Try to fix it or report to SAP.

former_member560382
Participant
0 Kudos

Heyy Stefan,

not header, but handler.. But the problem seems to be in the standard code.

Thanks for input anyways, we have reported to SAP.

Peter