Hi Devs;
I build the war from the trunk and try to deploy that, everything works
fine. However when I try to list the services it gave me the following
error. I think this has something to do with the changes that Andreas
did few months back.
javax.servlet.ServletException: http is forbidden
at
org.apache.axis2.transport.http.AxisServlet.preprocessRequest(AxisServlet.java:628)
at
org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:246)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
As I can see this is a big issues (unless I have something done wrong).
I just went though the source code and found few issues with that, so we
need to fix those; Following code in AxisServlet is not correct.
httpListener = getAxisServletListener(Constants.TRANSPORT_HTTP);
httpsListener =
getAxisServletListener(Constants.TRANSPORT_HTTPS);
if (httpListener == null && httpsListener == null) {
log.warn("No transportReceiver for " +
AxisServletListener.class.getName() +
" found. An instance for HTTP will be configured
automatically. " +
"Please update your axis2.xml file!");
httpListener = new AxisServletListener();
TransportInDescription transportInDescription = new
TransportInDescription(
Constants.TRANSPORT_HTTP);
transportInDescription.setReceiver(httpListener);
axisConfiguration.addTransportIn(transportInDescription);
} else if (httpListener != null && httpsListener != null
&& httpListener.getPort() == -1 &&
httpsListener.getPort() == -1) {
log.warn("If more than one transportReceiver for " +
AxisServletListener.class.getName() + " exists,
then all instances " +
"must be configured with a port number. WSDL
generation will be " +
"unreliable.");
}
Why do we need to call the following method for each request ?
private void preprocessRequest(HttpServletRequest req) throws
ServletException {
initContextRoot(req);
TransportInDescription transportInDescription =
req.isSecure()?
this.axisConfiguration.getTransportIn(Constants.TRANSPORT_HTTP) :
this.axisConfiguration.getTransportIn(Constants.TRANSPORT_HTTPS);
if (transportInDescription == null){
throw new ServletException(req.getScheme() + " is forbidden");
} else {
if (transportInDescription.getReceiver() instanceof
AxisServletListener){
AxisServletListener listner = (AxisServletListener)
transportInDescription.getReceiver();
// Autodetect the port number if necessary
if (listner.getPort() == -1){
listner.setPort(req.getServerPort());
}
}
}
}
As I can see something is really broken, please fix it (or else I might
have to revert to the original AxisServlet code).
Thanks,
Deepal