Использование GlassFish v3, EJB и SOAPUI - PullRequest
1 голос
/ 13 декабря 2011

Я хотел бы создать веб-сервис.

Я использую Glassfish v3, динамический веб-проект Eclipse и SOAPUI для тестирования.

У меня есть следующий код в затмении:

Класс MyLogin

package packageTest;

import java.io.IOException;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public class MyLogin {

@WebMethod
public AuthInfo login(@WebParam(name = "email") String email,@WebParam(name = "password")String password) throws IOException, CustomException {     
    if(email == null || email.isEmpty()){
            throw new CustomException("Email cannot be empty.");
        }

        if(password == null || password.isEmpty()){
            throw new CustomException("Password cannot be empty.");
        }
        return new AuthInfo("auth","token");    
    }
}

Класс AuthInfo

package packageTest;

import javax.persistence.Entity;

@Entity
public class AuthInfo {

    private String token;
    private String auth;

    public AuthInfo(){}

    public AuthInfo(String auth,String token) {
        super();
        this.token = token;
        this.auth = auth;
    }

    public String getToken() {
        return token;
    }
    public String getAuth() {
        return auth;
    }

    @Override
    public String toString() {
        return "AuthInfo [auth=" + auth + ", token=" + token + "]";
    }

}

Класс CustomException

package packageTest;

public class CustomException extends Exception {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public CustomException() {
    }

    public CustomException(String msg) {
        super(msg);
    }

    public CustomException(String msg,
            Throwable cause){
        super(msg,cause);
    }

}

Glassfish генерирует WSDL.

Я помещаю WSDL в SOAPUI и получаю этот сгенерированный запрос:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pac="http://packageTest/">
       <soapenv:Header/>
       <soapenv:Body>
          <pac:login>
             <!--Optional:-->
             <email>email</email>
             <!--Optional:-->
             <password>password</password>
          </pac:login>
       </soapenv:Body>
    </soapenv:Envelope>

и получите ответ:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:loginResponse xmlns:ns2="http://packageTest/">
         <return/>
      </ns2:loginResponse>
   </S:Body>
</S:Envelope>

Что идет не так, пожалуйста? Я подозреваю, что что-то не так с отправляемым запросом, но что-то не так с аннотациями, так как это моя первая попытка использовать веб-сервисы EJB.

Я ожидаю, что ответ, содержащий строки "auth" и "token", будет возвращен логином веб-метода в классе MyLogin.

1 Ответ

2 голосов
/ 13 декабря 2011

не вижу @WebParam

@WebMethod
public AuthInfo login(@WebParam(name = "email") String email, @WebParam(name = "password") String password) throws IOException, CustomException {   

Попробуйте изменить подпись, как описано выше, а затем попробуйте протестировать ее с помощью SOAPUI

Обновление

Вы также должны аннотировать свой AuthInfo класс, например,

@XmlAccessorType(value = XmlAccessType.NONE)
@Entity
public class AuthInfo{
    @XmlElement
    private String auth;

    @XmlElement
    private String token;
}
...