我有一个jax-ws Web服务类,其Web操作编写为:
public String processIncomingMsg(int msgType, String senderCB, int receiveCB,
int ussdOpType, String msIsdn, String serviceCode,
int codeScheme, String ussdString,
NamedParameterList extenionInfo) {
该服务部署在 GlassFish Web 服务器中,因此我可以访问http://localhost:8080/AppName/ReceiveUSSDNotifications?Tester
这是一种用于调用 Web 服务操作的表单。当我输入接收CB时,方法参数之一,作为0XFFFFFF
。我在 glassfish 服务器日志中看到"无法将0xFFFFFFFF转换为 int",并且
WS00041: Service invocation threw an exception with message : null; Refer to the server log for more details
Exceptions details : java.lang.IllegalArgumentException
javax.servlet.ServletException: java.lang.IllegalArgumentException at org.glassfish.webservices.monitoring.WebServiceTesterServlet.doPost(WebServiceTesterServlet.java:342)
at org.glassfish.webservices.monitoring.WebServiceTesterServlet.invoke(WebServiceTesterServlet.java:106)
at org.glassfish.webservices.JAXWSServlet.doPost(JAXWSServlet.java:157)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at ...
作为来自浏览器的响应(错误日志)。我想知道可能出了什么问题,因为0xffffff
只是整数的十六进制表示,所以不应该有转换问题。
您应该在此处发布完整的堆栈跟踪。
从表面上看,我会说你的期望是不现实的:
-
出于所有意图和目的,您提供的内容是一个
String
,根据您的操作定义,它应该转换为 int。唯一可能发生的方法是使用Integer.parseInt
的某种变体,特别是将十六进制转换为十进制的变体,Integer.parseInt(int, 16)
。该方法的任何其他化身都会用NumberFormatException
炸毁。测试工具或 JAXB 如何知道您没有提供 Base-10 格式,而是使用正确的parseInt
变体?更不用说前面的"0x"无论如何都会使其不可转换 -
即使它以某种方式被转换,你也会发现
Integer.MAX_VALUE== 2147483647
,这还不到FFFFFF==4294967295
。另一个NumberFormatException
.你应该有的是long