在Axis 1.4中获取/读取Web服务响应的问题

时间:2010-11-08 21:48:41

标签: web-services exception axis

我正在使用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代码处理truefalse,因为它获取字符串的第一个字符。问题是我收到的数据不好。

结束更新二

0 个答案:

没有答案