как использовать веб-ошибку JAX-WS - PullRequest
12 голосов
/ 07 июля 2011

Я написал веб-сервис и попытался выдать свое собственное исключение, но я получаю ошибку, пожалуйста, помогите мне решить ее.

import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService(name = "WebService")
public class WebServiceTest {
    public String sayHello(String name) throws InvalidInputException {
        throw new InvalidInputException("I am testing", null);
    }
    public static void main(String[] args) {
        WebServiceTest server = new WebServiceTest();
        Endpoint endpoint = Endpoint.publish(
                "http://localhost:9191/webServiceTest", server);
    }
}


import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;

@XmlType(name = "InputMessageValidationFaultType")
public class FaultBean {

    @XmlAttribute
    protected String msg;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String value) {
        this.msg = value;
    }

}


import javax.xml.ws.WebFault;

@WebFault(faultBean = "mytest.com.inc.FaultBean")
public class InvalidInputException extends Exception {

    private static final long serialVersionUID = 1L;

    private FaultBean faultBean;

    public InvalidInputException() {
        super();
    }

    public InvalidInputException(String message, FaultBean faultBean,
            Throwable cause) {
        super(message, cause);
        this.faultBean = faultBean;
    }

    public InvalidInputException(String message, FaultBean faultBean) {
        super(message);
        this.faultBean = faultBean;
    }

    public FaultBean getFaultInfo() {
        return faultBean;
    }
}

СООБЩЕНИЕ ОБ ОШИБКЕ Исключение в потоке "main"java.lang.NoSuchMethodError: javax.xml.ws.WebFault.messageName () Ljava / lang / String;в com.sun.xml.ws.model.RuntimeModeler.processExceptions (RuntimeModeler.java:1162) в com.sun.xml.ws.model.RuntimeModeler.processDocWrappedMethod (RuntimeModeler.java:898) в com.sun.xml.ws.model.RuntimeModeler.processMethod (RuntimeModeler.java:666) в com.sun.xml.ws.model.RuntimeModeler.processClass (RuntimeModeler.java:420) в com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel (.java: 254) в com.sun.xml.ws.server.EndpointFactory.createSEIModel (EndpointFactory.java:338) в com.sun.xml.ws.server.EndpointFactory.createEndpoint (EndpointFactory.java:201) в com.sun.xml.ws.api.server.WSEndpoint.create (WSEndpoint.java:505) в com.sun.xml.ws.transport.http.server.EndpointImpl.createEndpoint (EndpointImpl.java:257) в com.sun.xml.ws.transport.http.server.EndpointImpl.publish (EndpointImpl.java:181) в com.sun.xml.ws.spi.ProviderImpl.createAndPublishEndpoint (ProviderImpl.java:123) в javax.xml.ws.Endpoint.опубликовать (Endpoint.java:170) на mytest.com.inc.WebServiceTest.main (WebServiceTest.java:13)

Ответы [ 2 ]

12 голосов
/ 07 июля 2011

В последний раз, когда я видел эту ошибку, это было связано с несовпадением используемой версии JAX-WS (2.1.x и 2.2.x). Возможно, вы компилируете против версии 2.1.x, но работаете с 2.2.x, илинаоборот.

Имейте в виду, что JDK 6 включает в себя версию JAX-WS 2.1.x, поэтому вам может потребоваться использовать механизм согласованных библиотек, чтобы принудительно использовать 2.2.x

.
7 голосов
/ 31 июля 2012

Старый вопрос, который я знаю, но я думаю, что имена методов в вашем классе FaultBean должны быть getMessage и setMessage (в отличие от getMsg и setMsg) - см. Эту превосходную статью:

http://io.typepad.com/eben_hewitt_on_java/2009/07/using-soap-faults-and-exceptions-in-java-jaxws-web-services.html

...