Java 在EclipseWebServicesExplorer中测试WSDL

Java 在EclipseWebServicesExplorer中测试WSDL,java,eclipse,web-services,soap,wsdl,Java,Eclipse,Web Services,Soap,Wsdl,我有一个要测试的web服务的WSDL文件。我正在使用Eclipse中的Web服务浏览器来测试Web服务。webservice定义了一个登录操作,其中包含一条loginRequest消息。定义如下所示 登录操作 <wsdl:operation name="login" parameterOrder="in0"> <wsdl:input message="impl:loginRequest" name="loginRequest"/> </wsdl

我有一个要测试的web服务的WSDL文件。我正在使用Eclipse中的Web服务浏览器来测试Web服务。webservice定义了一个登录操作,其中包含一条loginRequest消息。定义如下所示

登录操作

  <wsdl:operation name="login" parameterOrder="in0">

     <wsdl:input message="impl:loginRequest" name="loginRequest"/>

  </wsdl:operation>


登录请求消息

<wsdl:message name="loginRequest">

      <wsdl:part name="in0" type="tns1:CompiereBean"/>

</wsdl:message>
<complexType name="ArrayOf_xsd_anyType">

<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:anyType[]"/>
</restriction>
</complexContent>

</complexType>

CompiereBean对象

<complexType name="CompiereBean">
    <sequence>
     <element name="loginDetails" nillable="true" type="impl:ArrayOf_xsd_anyType"/>
     <element name="productList" nillable="true" type="impl:ArrayOf_xsd_anyType"/>
     <element name="quantityList" nillable="true" type="impl:ArrayOf_xsd_anyType"/>
     <element name="tenantDetails" nillable="true" type="impl:ArrayOf_xsd_anyType"/>
    </sequence>
</complexType>

任何类型的xsd数组

<wsdl:message name="loginRequest">

      <wsdl:part name="in0" type="tns1:CompiereBean"/>

</wsdl:message>
<complexType name="ArrayOf_xsd_anyType">

<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:anyType[]"/>
</restriction>
</complexContent>

</complexType>

现在,为了测试Web服务,我右键单击WSDL文件->Web服务->使用Web服务浏览器测试。现在,我在操作窗格中获得了一个表单,其中包含用于指定loginDetails、productList、quantityList和tenantDetails的字段


所以,我的问题是,既然loginDetails、productList、quantityList和tenantDetails都是ArrayList对象,那么如何输入它们的值呢?

让我给你举个例子,也许它可以帮助你

package mypackage;

import java.io.Serializable;
import java.util.Date;

public class Thing implements Serializable{

    private static final long serialVersionUID = 4205832525113691806L;
    private String name;
    private Date date;
    private Long longg;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    }
    public Long getLongg() {
        return longg;
    }
    public void setLongg(Long longg) {
        this.longg = longg;
    }
    @Override
    public String toString() {
        return "Thing [name=" + name + ", date=" + date + ", longg=" + longg + "]";
    }
}
和web服务

package mypackage;

import java.util.Arrays;

import javax.ejb.Stateless;
import javax.jws.WebService;

@WebService
@Stateless
public class WS {   
    public void doSomething(Thing[] things){
        System.out.println(Arrays.asList(things));
    }
}
然后,如果您使用soapUI为您生成请求,您将得到如下结果

结果将是(在服务器日志中)

但是,当然,你想发送这些东西的数组,所以

瞧,结果会是

[Thing [name=aeoliam venit, date=Sun Sep 28 22:49:45 BRT 2008, longg=10], Thing [name=aeoliam venit, date=Sun Sep 28 22:49:45 BRT 2008, longg=10]]
明白了吗?:-)


令人难以置信的是,我们在任何地方都找不到这个答案。

在您的WSDL中,
impl:ArrayOf_xsd_anyType
的定义到底是什么?我们可以猜测,也可能接近它,但如果我们不必猜测,那就更好了。我用impl:arrayofxsd_anytype的定义更新了我的问题。我建议您尝试使用SoapUI()测试您的web服务。它是一个免费的工具,具有非常友好的界面来测试web服务。从WSDL中,它将创建一个测试服务的请求,您只需将“?”替换为值……感谢回复JuanZe。我安装了SoapUI。在SoapUI中创建了一个新项目并添加了我的WSDL。现在,在请求区域中显示了以下XML(),但没有问号..这里可能出了什么问题?@blackpanther我已经恢复了您的,因为首先,您没有纠正您声称的任何语法(您只是更改了它),其次,您更改了一个代码段。那是不可能的,我不会接受。如果您已经厌倦了建议这些小的改进,那么我建议您至少不要使用代码片段(除了无意义的空白)。非常感谢。