java.lang.IllegalArgumentException,但参数似乎是有效类型

时间:2014-12-01 10:01:56

标签: java web-services soap glassfish jax-ws

我有一个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网络服务器中,因此我可以访问http://localhost:8080/AppName/ReceiveUSSDNotifications?Tester,这是一个用于调用Web服务操作的表单。当我输入receiveCB时,其中一个方法参数为0XFFFFFF。我在glassfish服务器日志和

中看到“无法在int中转换0xFFFFFFFF”
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只是整数的十六进制表示,所以不应该有转换问题。

1 个答案:

答案 0 :(得分:1)

你应该在这里发布完整的堆栈跟踪。

从表面上看,我会说你的期望是不现实的:

  1. 您提供的内容,无论出于什么意图和目的,都是String,根据您的操作定义,它应该转换为int。可能发生这种情况的唯一方法是使用Integer.parseInt的一些变体,特别是将十六进制转换为十进制的变体Integer.parseInt(int, 16)。该方法的任何其他化身都会被NumberFormatException炸毁。如果使用parseInt的正确变体,测试工具或JAXB如何知道您没有提供Base-10格式?更不用说前面的“0x”会使它无法转换

  2. 即使它以某种方式被转换,你也会发现Integer.MAX_VALUE== 2147483647,它小于FFFFFF==4294967295。另一个NumberFormatException。您应该拥有long