从Web服务获取响应时出错非默认命名空间无法映射到空URI

时间:2013-01-29 08:46:17

标签: java webservice-client axis

我正在尝试创建一个java webservice客户端。这是一个非常简单的服务,它接收一个String并返回另一个String。我正在使用soapUI测试服务并且工作正常,但是当我尝试在java中编写代码时它失败了。

以下是我用来调用服务的代码

    QName QNAME_TYPE_STRING = new QName(nameSpaceURI,"string");
    Service service = new Service();
    Call call = (Call) service.createCall();
    call.setTargetEndpointAddress(new java.net.URL(endpoint));
    call.setOperationName(new QName(nameSpaceURI, webServiceMethod));
    call.addParameter("buil:arg0", XMLType.XSD_STRING, ParameterMode.IN);
    call.setReturnType(QNAME_TYPE_STRING, String.class);
    String ret = (String) call.invoke(new Object[]{"PARAMETER VALUE"});

endPoint变量正确指向服务的网址,并且:

nameSpaceURI = "http://build.response.service/";
webServiceMethod = "buildResponse";

问题是webService正确获取参数,但响应发生了一些事情:

Caused by: com.ctc.wstx.exc.WstxParsingException: Non-default namespace can not map to
empty URI (as per Namespace 1.0 # 2) in XML 1.0 documents
at javax.xml.stream.SerializableLocation@6fee8ce6

这是我在soapUI

上的请求示例
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:buil="http://build.response.service/">
    <soapenv:Header/>
        <soapenv:Body>
            <buil:buildResponse>
                <buil:arg0>PARAMETER VALUE</buil:arg0>
            </buil:buildResponse>
        </soapenv:Body>
</soapenv:Envelope>

这是soapUI上的响应示例

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <ns1:buildResponse xmlns:ns1="http://build.response.service/">
            <return xmlns="http://build.response.service/">
                RESPONSE1,RESPONSE2,RESPONSE3
            </return>
        </ns1:buildResponse>
    </soap:Body>
</soap:Envelope>

¿想法?我认为这与响应有关,但我真的是webServices的新手(我知道......我知道...... 21世纪......)。

更多信息:我没有被授权使用wsdl2java也没有发布服务的wsdl(无论如何它是自动生成的,我与它无关,它不会改变)。对此抱歉,我希望尽管有这些限制可以帮助我。

谢谢!

1 个答案:

答案 0 :(得分:2)

上帝......这很简单,对呼叫参数做了一点改动:

call.addParameter(new QName(nameSpaceURI, "buil:arg0"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName(nameSpaceURI, "return"), XMLType.XSD_STRING, ParameterMode.OUT);

现在它就像一个魅力,希望这有助于某人。