On Mon, Oct 5, 2009 at 8:44 AM, Deepal jayasinghe <deep...@gmail.com> wrote:
> 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. > No this from the later change I did. Now it is fixed in the trunk. For this fix we need to shift a separate axis2.xml for web app with the new transports. Will do that as well. thanks, Amila. > > 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 > -- Amila Suriarachchi WSO2 Inc. blog: http://amilachinthaka.blogspot.com/