我正在使用Axis 1.4来创建Web服务客户端,因为该服务使用RPC编码。我使用基于提供的wsdl文件的wsdl2java自动生成了客户端代码。我无法使用附加到服务URL的?wsdl从服务本身获取wsdl,因为它不接受GET请求。
当我尝试通过客户端访问服务时,它首先记录此异常:
DEBUG org.apache.axis.ConfigurationException - Exception:
org.apache.axis.ConfigurationException: No service named GetSettings is available
我在其他帖子中读到这不是值得担心的事情。但是,如果我能摆脱它,那就太好了。我的客户端类看起来像这样(尝试/捕获已删除):
private String endpoint = "http://<IP>/ToolsServlet/";
private ToolsServiceLocator locator;
private ToolsPort service;
public ToolsClient()
{
locator = new ToolsServiceLocator();
URL url = new URL(endpoint);
service = locator.getToolsService(url);
}
public SwitchSettingsType getProvisionedSettings(String value)
{
SettingsType settings = service.getSettings(value);
return settings;
}
我真正的问题在于我尝试解析响应时遇到异常。例如:
INFO: 13:59:17,361 [http-thread-pool-8080-(2)] ERROR org.apache.axis.client.Call - Exception:
java.lang.NumberFormatException: Invalid boolean
at org.apache.axis.encoding.ser.SimpleDeserializer.onEndElement(SimpleDeserializer.java:180)
at org.apache.axis.encoding.DeserializerImpl.endElement(DeserializerImpl.java:502)
...
Caused by: java.lang.NumberFormatException: Invalid boolean
at org.apache.axis.encoding.ser.SimpleDeserializer.makeBasicValue(SimpleDeserializer.java:270)
at org.apache.axis.encoding.ser.SimpleDeserializer.makeValue(SimpleDeserializer.java:209)
at org.apache.axis.encoding.ser.SimpleDeserializer.onEndElement(SimpleDeserializer.java:172)
... 40 more
启用调试级别登录时,此异常之前是请求的记录和这些行:
DEBUG org.apache.axis.transport.http.HTTPSender - POST /ToolsServlet/ HTTP/1.0
Content-Type: text/xml; charset=utf-8
Accept: application/soap+xml, application/dime, multipart/related, text/*
User-Agent: Axis/1.4
Host: <IP>
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: "GetSettings"
Content-Length: 479
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><ns1:GetSettings soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:tools"><value xsi:type="xsd:string">value</value></ns1:GetSettings></soapenv:Body></soapenv:Envelope>
DEBUG org.apache.axis.transport.http.HTTPSender - HTTP/1.1 200 OK
DEBUG org.apache.axis.transport.http.HTTPSender - Date Mon, 08 Nov 2010 20:59:12 GMT
DEBUG org.apache.axis.transport.http.HTTPSender - Server Apache/2.0.53 (Unix) DAV/2
DEBUG org.apache.axis.transport.http.HTTPSender - Connection close
DEBUG org.apache.axis.transport.http.HTTPSender - Content-Type text/xml
DEBUG org.apache.axis.SOAPPart - Enter: SOAPPart ctor(FORM_INPUTSTREAM)
DEBUG org.apache.axis.i18n.ProjectResourceBundle - org.apache.axis.i18n.resource::handleGetObject(setMsgForm)
DEBUG org.apache.axis.SOAPPart - Setting current message form to: FORM_INPUTSTREAM (currentMessage is now org.apache.axis.transport.http.SocketInputStream)
DEBUG org.apache.axis.SOAPPart - Exit: SOAPPart ctor()
DEBUG org.apache.axis.i18n.ProjectResourceBundle - org.apache.axis.i18n.resource::handleGetObject(no00)
DEBUG org.apache.axis.transport.http.HTTPSender -
no Content-Length
DEBUG org.apache.axis.i18n.ProjectResourceBundle - org.apache.axis.i18n.resource::handleGetObject(xmlRecd00)
DEBUG org.apache.axis.transport.http.HTTPSender -
XML received:
在我看来,我没有收到适当的回复。我使用Firefox和Poster插件测试了针对webservice的直接帖子。我使用了客户端生成的SOAP消息/请求,我确实得到了有效的响应。
我是否正确阅读了日志,因为Axis认为有空的回复?如果是这样,是否有人建议为什么Axis没有得到回复或没有正确阅读?我在日志中看不到任何提供任何线索的内容。
启动Update One
看来我回复了一个响应,即使它没有记录在那个地方,但是更多日志语句显示尝试通过DeserializationContext解析响应。 Axis抛出一个NumberFormatException,因为它假设'0', 'f' or 'F'
为假,'1', 't' or 'T'
为true。它不喜欢真正扭曲的'true'或'false',因为wsdl将元素定义为xsd:boolean,允许的值为'true'
和'false'
。
除了更新源代码以正确处理'true'和'false'之外,是否有任何建议让Axis工作?
TIA
结束更新一次
开始更新二
第二天新鲜的眼睛帮助。 Axis代码处理true
和false
,因为它获取字符串的第一个字符。问题是我收到的数据不好。
结束更新二