You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ws.apache.org by teemu kanstren <tk...@gmail.com> on 2011/02/15 19:31:50 UTC

ServletWebServer + enabledForExtensions

Hello all,

 I have been using Apache XMLRPC with extensions enabled with the WebServer
class successfully. However, now I had the need to access also the client IP
address that is making the request to the server. So according to the
instructions on the project web site, I switched to the ServletWebServer. As
an end result, I manage to access the caller IP address just fine. However,
I have problems getting ServletWebServer to work with extensions enabled.

I tried this

      ServletWebServer webServer = new ServletWebServer(new
MyXmlRpcServlet(myPropertyHandlerMapping), port);
      webServer.getConfig().setEnabledForExtensions(true);
      webServer.start();

which used to work with WebServer but not with ServletWebServer. I get
exceptions in my code complaining that the features I use require enabling
the extensions. I thought this should work according to the docs, but since
it did not, I went with plenty of other attempts including

-creating a new config object, setting enabledForExtension to true, and
setting this to the server instead of querying the existing one
-modifying the doPost() method of my MyXmlRpcServlet that extends
XmlRpcServlet to always call getXmlRpcServer.getConfig() and setting
enabledForExtension, also the set method above for this
-always creating a new XmlRpcHandlerMapping or caching one in the servlet,
because I thought originally I had a problem with some inputstreams being
used many times (lost the actual exception first)
-various other approach I forget

None of those worked for me. I always get the exception that the extensions
are not enabled.

Then I downloaded the source codes, and tried my best to understand what is
happening. But all the modules are split and I failed to configure my IDE to
properly access all methods across modules. Well, putting my Maven issues
aside I then tried to understand where the enabledForExtensions should be
enabled. I ended up somewhere in the XmlRpcWriter class (from my stack
traces), where I got totally confused about all the different configuration
objects all having the enabledForExtensions flag inside them. One is a class
level object accessed in writeValue() and another one is passed as a
parameter to write() that calls writeValue(). Similarly other types seemed
to be spread in the code. Eventually I gave up trying to understand this and
just put in some prints to show what the values are. Both the configurations
in XmlRpcWriter were always false for enabling extensions in all the
approaches I used. So I never really figured out how I should set this flag
to actually get it enabled with the ServletWebServer.

I did notice that there is only one place where the configuration value for
enabledForExtension is accessed, and that is in the XmlRpcConfigImpl class,
which all the rest of the config classes seem to extend. So I changed this
to always return true for extensions and recompiled it all. Using this new
version I got my code to work. But I would like to implement this properly
rather than have to recompile my own binaries for the library.

I am sure I missed something obvious, so perhaps someone could tell me how
the extension value/configuration object traverses the code base and how
should I set it to get it used?

Thanks,
Teemu

Re: ServletWebServer + enabledForExtensions

Posted by Aymac <an...@gmail.com>.

I don't suppose you ever found a good solution to this problem?  I've been
trying to resolve the exact same problem as you describe here.  Exceptions
are being thrown because extensions are not enabled; even though, the config
I set does.

I've been digging through code as well.  I found one place where it calls a
newConifg() method, which just creates a config object and extensions are
disabled.  I'm calling setConfig() everywhere I can find, but they don't
appear to get used.

I may have to start looking a little more closely at the code to figure this
one out, which I was hoping to not have to do.  Doing all of this, just to
get the client's IP address.

Andrew  


teemu wrote:
> 
> Hello all,
> 
>  I have been using Apache XMLRPC with extensions enabled with the
> WebServer
> class successfully. However, now I had the need to access also the client
> IP
> address that is making the request to the server. So according to the
> instructions on the project web site, I switched to the ServletWebServer.
> As
> an end result, I manage to access the caller IP address just fine.
> However,
> I have problems getting ServletWebServer to work with extensions enabled.
> 
> I tried this
> 
>       ServletWebServer webServer = new ServletWebServer(new
> MyXmlRpcServlet(myPropertyHandlerMapping), port);
>       webServer.getConfig().setEnabledForExtensions(true);
>       webServer.start();
> 
> which used to work with WebServer but not with ServletWebServer. I get
> exceptions in my code complaining that the features I use require enabling
> the extensions. I thought this should work according to the docs, but
> since
> it did not, I went with plenty of other attempts including
> 
> -creating a new config object, setting enabledForExtension to true, and
> setting this to the server instead of querying the existing one
> -modifying the doPost() method of my MyXmlRpcServlet that extends
> XmlRpcServlet to always call getXmlRpcServer.getConfig() and setting
> enabledForExtension, also the set method above for this
> -always creating a new XmlRpcHandlerMapping or caching one in the servlet,
> because I thought originally I had a problem with some inputstreams being
> used many times (lost the actual exception first)
> -various other approach I forget
> 
> None of those worked for me. I always get the exception that the
> extensions
> are not enabled.
> 
> Then I downloaded the source codes, and tried my best to understand what
> is
> happening. But all the modules are split and I failed to configure my IDE
> to
> properly access all methods across modules. Well, putting my Maven issues
> aside I then tried to understand where the enabledForExtensions should be
> enabled. I ended up somewhere in the XmlRpcWriter class (from my stack
> traces), where I got totally confused about all the different
> configuration
> objects all having the enabledForExtensions flag inside them. One is a
> class
> level object accessed in writeValue() and another one is passed as a
> parameter to write() that calls writeValue(). Similarly other types seemed
> to be spread in the code. Eventually I gave up trying to understand this
> and
> just put in some prints to show what the values are. Both the
> configurations
> in XmlRpcWriter were always false for enabling extensions in all the
> approaches I used. So I never really figured out how I should set this
> flag
> to actually get it enabled with the ServletWebServer.
> 
> I did notice that there is only one place where the configuration value
> for
> enabledForExtension is accessed, and that is in the XmlRpcConfigImpl
> class,
> which all the rest of the config classes seem to extend. So I changed this
> to always return true for extensions and recompiled it all. Using this new
> version I got my code to work. But I would like to implement this properly
> rather than have to recompile my own binaries for the library.
> 
> I am sure I missed something obvious, so perhaps someone could tell me how
> the extension value/configuration object traverses the code base and how
> should I set it to get it used?
> 
> Thanks,
> Teemu
> 
> 

-- 
View this message in context: http://old.nabble.com/ServletWebServer-%2B-enabledForExtensions-tp30933900p32887079.html
Sent from the Apache Xml-RPC - Dev mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org
For additional commands, e-mail: dev-help@ws.apache.org


Re: ServletWebServer + enabledForExtensions

Posted by Lars Schnoor <La...@ifad.dk>.
Hi Teemu

I unfortunately don't think you will get any answer to your question. If 
you look a few days/weeks back (31. January), you will notice that I 
asked the same question and didn't get an answer either, I however want 
to enable for extensions using Jetty as the web server.

Lars

On 15-02-2011 19:31, teemu kanstren wrote:
> Hello all,
>
>  I have been using Apache XMLRPC with extensions enabled with the 
> WebServer class successfully. However, now I had the need to access 
> also the client IP address that is making the request to the server. 
> So according to the instructions on the project web site, I switched 
> to the ServletWebServer. As an end result, I manage to access the 
> caller IP address just fine. However, I have problems getting 
> ServletWebServer to work with extensions enabled.
>
> I tried this
>
>       ServletWebServer webServer = new ServletWebServer(new 
> MyXmlRpcServlet(myPropertyHandlerMapping), port);
>       webServer.getConfig().setEnabledForExtensions(true);
>       webServer.start();
>
> which used to work with WebServer but not with ServletWebServer. I get 
> exceptions in my code complaining that the features I use require 
> enabling the extensions. I thought this should work according to the 
> docs, but since it did not, I went with plenty of other attempts including
>
> -creating a new config object, setting enabledForExtension to true, 
> and setting this to the server instead of querying the existing one
> -modifying the doPost() method of my MyXmlRpcServlet that extends 
> XmlRpcServlet to always call getXmlRpcServer.getConfig() and setting 
> enabledForExtension, also the set method above for this
> -always creating a new XmlRpcHandlerMapping or caching one in the 
> servlet, because I thought originally I had a problem with some 
> inputstreams being used many times (lost the actual exception first)
> -various other approach I forget
>
> None of those worked for me. I always get the exception that the 
> extensions are not enabled.
>
> Then I downloaded the source codes, and tried my best to understand 
> what is happening. But all the modules are split and I failed to 
> configure my IDE to properly access all methods across modules. Well, 
> putting my Maven issues aside I then tried to understand where the 
> enabledForExtensions should be enabled. I ended up somewhere in the 
> XmlRpcWriter class (from my stack traces), where I got totally 
> confused about all the different configuration objects all having the 
> enabledForExtensions flag inside them. One is a class level object 
> accessed in writeValue() and another one is passed as a parameter to 
> write() that calls writeValue(). Similarly other types seemed to be 
> spread in the code. Eventually I gave up trying to understand this and 
> just put in some prints to show what the values are. Both the 
> configurations in XmlRpcWriter were always false for enabling 
> extensions in all the approaches I used. So I never really figured out 
> how I should set this flag to actually get it enabled with the 
> ServletWebServer.
>
> I did notice that there is only one place where the configuration 
> value for enabledForExtension is accessed, and that is in the 
> XmlRpcConfigImpl class, which all the rest of the config classes seem 
> to extend. So I changed this to always return true for extensions and 
> recompiled it all. Using this new version I got my code to work. But I 
> would like to implement this properly rather than have to recompile my 
> own binaries for the library.
>
> I am sure I missed something obvious, so perhaps someone could tell me 
> how the extension value/configuration object traverses the code base 
> and how should I set it to get it used?
>
> Thanks,
> Teemu
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org
For additional commands, e-mail: dev-help@ws.apache.org