我有一个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
格式/内容一定有问题。
答案 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/">