【问题标题】:java web service SOAPJava Web 服务 SOAP
【发布时间】:2015-06-23 21:58:48
【问题描述】:

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

我在 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 服务(在属性中我选择了 Axis2 和 Tomcat 服务器)。然后我对 Person 类做了类似的事情。

我认为一切正常,所以我添加了带有搜索的 Web 服务客户端,然后我尝试添加人员 Web 服务,但出现了错误:WSDL 代码生成期间发生异常:org.apache.axis2.AxisFault:否在 portType 元素中找到的操作。

当我尝试调用操作时:

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

代替点 Eclipse 给了我这样的建议:

a.searchBySurname(SearchBySurname searchBySurname2);

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

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

【问题讨论】:

    标签: java eclipse web-services soap


    【解决方案1】:

    如果不首先生成有效的 WSDL,您就无法调用您的服务。根据您的错误,Eclipse 认为您缺少操作(方法)。这是因为您的 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

    【讨论】:

      猜你喜欢
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多