Java – do string parameters usually escape automatically in Web services?
Today, I found that a simple% of the string parameters passed from the client to the server can lead to an incorrect request 400
Because I have a basic knowledge of Web services, I don't know if this is normal behavior Did I miss something (was it my responsibility to escape the string?) Or should I look elsewhere?
Customer code:
@WebMethod(operationName = "push",action = "urn:Push") public boolean push(String msg);
Server code:
@XmlRootElement(name = "push",namespace = "http://ws.something.com/") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "push",namespace = "http://ws.something.com/",propOrder = {"arg0"}) public class Push { @XmlElement(name = "arg0") private java.lang.String arg0; public java.lang.String getArg0() { return this.arg0; } public void setArg0(java.lang.String newArg0) { this.arg0 = newArg0; } }
be careful:
This client / server pair works locally on our development host server, even if there is%. In the string parameter However, it does cause bad request 400 on another host server Therefore, it may be related to the server host environment If so, I would like to suggest the possible reasons for this situation
Solution
It is likely that the default character set is different in your environment Try this sample
String test = new String("%"); System.out.println(test); byte[] byteArray = test.getBytes("UTF-16"); test = new String(byteArray); System.out.println(test);
This is crude, but you will understand how character encoding affects the results
Please check here for more details https://docs.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html