Java使用Web服务

时间:2011-03-15 13:59:29

标签: java web-services gwt jax-ws

我被要求重建我们的客户门户网站,使用gwt并使用服务器上设置的各种Web服务连接到我们的数据。

我生成了所有代理类,使用了WSDL和Jax-WS / wsimport实用程序,但是当我进行以下调用时:

ReportingApiSoap soap = api.getReportingApiSoap();      
ArrayOfReport returnValues = soap.getReports(serverCredentials, true);

我的returnValues对象为null。我知道web服务本身是有效的,因为我能够使用我现在传递的相同参数来测试它。

我以前在向网络服务发送数据时遇到了一些问题;结果是命名空间没有按需要排队。我怀疑这里发生了类似的事情,但还没弄清楚到底是什么。

以前遇到过类似事情的人?或者,如果不知道如何检查原始xml我正在退出webservice调用?这样我就可以追溯这个问题了。

-Ian

我的凭证对象:

public class ApiCredentials {

 @XmlElement(name = "Id", namespace="http://mycompany.com")
 protected String id;
 @XmlElement(name = "Login", namespace="http://mycompany.com")
 protected String login;
 @XmlElement(name = "Password", namespace="http://mycompany.com")
 protected String password;

 ...
}

ArrayofReport:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ArrayOfReport", propOrder = {
 "report"
})
public class ArrayOfReport {

 @XmlElement(name = "Report", nillable = true)
 protected List<Report> report;

 public List<Report> getReport() {
    if (report == null) {
        report = new ArrayList<Report>();
    }
    return this.report;
 }

}

Webservice电话:

@WebMethod(operationName = "GetReports", action = "http://mycompany.com/GetReports")
@WebResult(name = "GetReportsResult", targetNamespace = "http://mycompany.com")
@RequestWrapper(localName = "GetReports", targetNamespace = "http://mycompany.com", className = "com.mycompany.customerportal.server.GetReports")
@ResponseWrapper(localName = "GetReportsResponse", targetNamespace = "http://mycompany.com", className = "com.mycompany.customerportal.server.GetReportsResponse")
public ArrayOfReport getReports(
    @WebParam(name = "credentials", targetNamespace = "http://mycompany.com")
    ApiCredentials credentials,
    @WebParam(name = "includeFields", targetNamespace = "http://mycompany.com")
    boolean includeFields);

1 个答案:

答案 0 :(得分:1)

我建议创建模拟网络服务(例如使用soapUI)。这将允许您根据WSDL查看和验证请求XML。您可以剪切'n'粘贴/编辑对客户端的模拟响应以查看效果。

JAX-WS实现只需要一打,所以任何进一步的选择都取决于运行时的客户端技术。我会确保启用验证(例如,这可以实现为feature)。