2013-01-05 28 views
0

我创建了一个非常简单的服务,它将一些文本回显到控制台。的服务仅仅是一个的方法回波POJO,具有一个参数:Axis2中POJO参数中空格的编码

public class EchoTest 
{ 
    public void echo(String myMessage) 
    { 
     System.out.println(myMessage); 
    } 
} 

THS距离的services.xml:

<service name="EchoTest"> 
    <description>Echo test</description> 
    <parameter name="ServiceClass">EchoTest</parameter> 

    <operation name="echo"> 
     <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> 
    </operation> 
</service> 

另外我用一个非常简单的HTML表单提交数据到服务:

<html> 
<body> 
    <form method="post" target="responseFrame" action="../../services/EchoTest/echo"> 
     <input name="myMessage" type="text"> 
     <input value="Send" type="submit"/>   
    </form> 
    <iframe width=500 height=500 name="responseFrame"></iframe> 
</body> 
</html> 

我的问题是空间与“+”代替。例如,如果我输入这样的消息:

Hey you & you - # % @ 

结果是这样的:

Hey+you+&+you+-+#+%[email protected] 

我必须以某种方式对其进行编码或还是应该不是这样的表现?或者这可能是一个设置问题?我使用Tomcat作为Web容器。有关信息,我使用Tomcat中的servlet过滤器来例如过滤IP地址,并在那里我可以看到myMessage参数看起来不错,没有+符号。

+0

URL规范说明空格在请求参数中应该被编码为'+'符号。你是说你在服务器端获取参数值,它仍然是编码的?这似乎不正确... –

+0

@ChristopherSchultz是的,这是服务器端的消息。另一个非常奇怪的事情是,如果我在消息中写了+符号,比如test + test,那么+不会以任何方式进行编码,这个消息只是test + test。如果我写测试+测试,它将成为测试+++测试。这意味着我甚至无法正确解码它:/ – Rob

+0

老实说,这听起来像是一件非常错误的事情。您是否通过Axis2部署了所有这些,而不需要比上面显示的配置更多的配置? –

回答

0

事实证明,问题实际上是在Axis2本身。我不确定,但是我使用的版本是从2009年10月发布的1.5.1版本。令我感到困扰的是,我还没有找到任何错误报告。这可能是因为它很快就修好了,而且我很不幸。

升级到最新版本的Axis2解决了这个问题。