Thanks! I tried it and the observations are as follows.
Please attention the scenario is servlet transport (Tomcat).
1. When we publish a service, a destination
(org.apache.cxf.transport.servlet.ServletDestination) is registered
with the address as a key.
For example, Endpoint.publish("/Greet%20er", new GreeterImpl());
The key will be "/Greet%20er".
2. The service location in the WSDL is the same as the address when we
publish the service.
For example, Endpoint.publish("/Greet%20er", new GreeterImpl());
The service location in the WSDL will be <soap:address
location="http://localhost:9090/context/Greet%20er" />
3. When we invoke the service, we will get the destination by the key,
which is request.getPathInfo().
For example, if we open url "http://localhost:9090/context/Greet%20er"
The key will be "/Greet er". So we cannot get the correct destination
with key "/Greet%20er".
In my opinion, the address should be escaped, because the rfc2396 tells us:
2.4.2. When to Escape and Unescape
A URI is always in an "escaped" form, since escaping or unescaping a
completed URI might change its semantics. Normally, the only time
escape encodings can safely be made is when the URI is being created
from its component parts; each component may have its own set of
characters that are reserved, so only the mechanism responsible for
generating or interpreting that component can determine whether or
not escaping a character will change its semantics. Likewise, a URI
must be separated into its components before the escaped characters
within those components can be safely decoded.
Please correct me if anything wrong.
-tong
On Tue, Jun 16, 2009 at 4:25 AM, Daniel Kulp<[email protected]> wrote:
>
> Honestly, I have no idea. Try it and let us know how it works out. :-)
>
> Dan
>
>
> On Mon June 15 2009 10:20:24 am Tong Wang wrote:
>> Hi,
>>
>> I publish web services to Tomcat following the guide at
>> http://cwiki.apache.org/CXF20DOC/servlet-transport.html.
>> There is an example,
>>
>> Endpoint.publish("/Greeter", new GreeterImpl());
>>
>> I would like to know if the address contains invalid characters, does
>> it need to be escaped?
>>
>> For example,
>> Endpoint.publish("/Greet er", new GreeterImpl());
>> or
>> Endpoint.publish("/Greet+er", new GreeterImpl());
>> or
>> Endpoint.publish("/Greet%20er", new GreeterImpl());
>>
>> And in the WSDL, the service location should be
>> <soap:address location="http://localhost:9090/context/Greet er" />
>> or
>> <soap:address location="http://localhost:9090/context/Greet+er" />
>> or
>> <soap:address location="http://localhost:9090/context/Greet%20er" />
>>
>> Any comment will be appreciated!
>>
>> -tong
>
> --
> Daniel Kulp
> [email protected]
> http://www.dankulp.com/blog
>