java web service SOAP



我有这样的问题:创建您自己的SOAP web服务,该服务将保存有关人员的信息(例如在地图中)。每个人都具有以下属性:名字,姓氏,出生日期。您的web服务将响应一个查询,该查询将根据以下信息过滤存储的条目:姓氏、出生日期。根据提供的示例创建一个JUnit测试,用于验证您的SOAPWeb服务是否按预期工作。

我在Eclipse中创建了动态Web项目,并编写了这样的类:

public class Person {
    String firstName, surname, birthDate;
    public Person(String firstName, String surname, String birthDate) {
        this.firstName = firstName;
        this.surname = surname;
        this.birthDate = birthDate;
    }
}

和搜索:

public class Search {
    ArrayList<Person> people = new ArrayList<Person>();
    public Search() {
        Person jim = new Person("Jim", "Abacki","01/01/1990");
        Person scott = new Person("Scott","Babacki", "01/01/1990");
        Person anna = new Person("Anna","Cabacki", "01/01/1991");
        Person dan = new Person("Dan","Dabacki", "01/01/1992");
        Person ola = new Person("Ola","Fabacki", "01/01/1993");
        Person eva = new Person("Eva","Fabacki", "01/01/1991");
        people.add(jim);
        people.add(scott);
        people.add(anna);
        people.add(dan);
        people.add(ola);
        people.add(eva);
    }
    public String[] searchBySurname(String surname){
        int i =0;
        for(Person x : people){
            if(x.surname==surname){
                i++;
            }
        }
        String[] result = new String[i];
        int a=0;
        for(Person x : people){
            if(x.surname==surname){
                result[a]=x.firstName+ " "+ x.surname + " "+ x.birthDate;
                a++;
            }
        }
        return result;
    }

    public String[] searchByBirthDate(String birthDate){
        int i =0;
        for(Person x : people){
            if(x.surname==birthDate){
                i++;
            }
        }
        String[] result = new String[i];
        int a=0;
        for(Person x : people){
            if(x.surname==birthDate){
                result[a]=x.firstName + " "+ x.surname + " "+ x.birthDate;
                a++;
            }
        }
        return result;
    }
}

然后,我通过单击类Search->Web Services->Create new Web Service添加了新的Web Service(在属性中,我选择了Axis2和TomcatServer)。然后我对Person类做了类似的事情。

我认为一切都很好,所以我添加了带有Search的web服务客户端,然后我尝试添加Person web服务,但出现了错误:在为WSDL:org.apache.axis2.AxisFault生成代码期间发生异常:在portType元素中找不到操作。

当我试图调用操作时,比如:

SearchStub a = new SearchStub();
a.searchBySurname(...);

Eclipse给我的建议是:

a.searchBySurname(SearchBySurname searchBySurname2);

这对我来说也很奇怪,因为这个函数作为参数应该接受String。

以下是我的问题:我做错了什么?你能帮我解决这个问题吗?也许有人有很好的教程,因为我在网上找到的并没有帮助。

如果不首先生成有效的WSDL,就无法调用服务。基于您的错误,Eclipse认为您缺少一个Operation(方法)。发生这种情况是因为您的Person类没有任何方法。因此,没有操作。

幸运的是,就您的设置方式而言,您不需要遍历并生成基于Person的WSDL。但是,您的Search类使用Person,并且WSDL应该可以毫无问题地生成。这是您唯一需要的WSDL。


现在,对于您的searchBySurname方法,根据您所拥有的内容,这似乎并不正常。我的想法(我从这里调试):(a) 您的搜索源看起来不错,所以WSDL应该不错。(b) 客户生成???(c) 当您的WSDL指定String时,该方法需要一个SearchBySurname对象,因此客户端生成一定是错误的。所以它告诉您使用SearchBySurname对象而不是String。

(*)查看本教程:http://www.java2blog.com/2013/03/web-service-tutorial.html

最新更新