从JavaScript调用JAX-WS Web服务时的空参数

时间:2015-03-27 08:28:21

标签: java javascript xml web-services

我有一个JAX-WS Web服务,它可以从任何客户端(即Java destkop应用程序)调用,但不能从JavaScript调用。

我的WS界面如下所示:

@WebService
public interface LicenseService {

    @WebMethod
    String getLicense(
            @WebParam(name="coupon") String coupon,
            @WebParam(name="licenseCode") String licenseCode,
            @WebParam(name="secret") String secret);
    }

我从这样的javascript中调用它:

var request = new XMLHttpRequest();
request.open("POST", url, false);

request.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
request.send(envelope);

,发送的envelope如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <getLicense xmlns="http://ws.licenseman.elevelcbt.eu/">
            <coupon>SYcj1J9I</coupon>
            <licenseCode>BEPRO</licenseCode>
            <secret>1234567890</secret>
        </getLicense>
    </soap:Body>
</soap:Envelope>

调用该方法(我可以在Java端跟踪),但所有传递的参数都为null。我的envelope格式/内容一定有问题。

1 个答案:

答案 0 :(得分:1)

好的我明白了。 我需要将我的envelope格式更改为这样(我通过在从java客户端成功调用WS时跟踪原始xml消息来获取它):

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Header />
    <SOAP-ENV:Body>
        <ns1:getLicense xmlns:ns1="http://ws.licenseman.elevelcbt.eu/">
            <coupon>1111</coupon>
            <licenseCode>BEPRO</licenseCode>
            <secret>xxxxxxx</secret>
        </ns1:getLicense>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

似乎JAX-WS不像这样的方法声明:

<getLicense xmlns="http://ws.licenseman.elevelcbt.eu/">

并且想要那样:

<ns1:getLicense xmlns:ns1="http://ws.licenseman.elevelcbt.eu/">