web-dev-qa-db-ja.com

JAX-WSwebfaultの使用方法

Webサービスを作成し、カスタム例外をスローしようとしましたが、エラーが発生しました。解決にご協力ください。

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;
    }
}

ERROR MESSAGEスレッド "main"の例外Java.lang.NoSuchMethodError:javax.xml.ws.WebFault.messageName()Ljava/lang/String; com.Sun.xml.ws.model.RuntimeModeler.processExceptions(RuntimeModeler.Java:1162)at com.Sun.xml.ws.model.RuntimeModeler.processDocWrappedMethod(RuntimeModeler.Java:898)at com.Sun.xml.ws .model.RuntimeModeler.processMethod(RuntimeModeler.Java:666)at com.Sun.xml.ws.model.RuntimeModeler.processClass(RuntimeModeler.Java:420)at com.Sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler .Java:254)at com.Sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.Java:338)at com.Sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.Java:201)atcom。 Sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.Java:505)at com.Sun.xml.ws.transport.http.server.EndpointImpl.createEndpoint(EndpointImpl.Java:257)at com.Sun。 xml.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.Java:181)at com.Sun.xml.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.Java:123)atjavax.xml.ws.Endpoint。 mytest.com.inc.WebServiceTest.main(WebServiceTe)でpublish(Endpoint.Java:170) st.Java:13)

12
Arvind

私が知っている古い質問ですが、FaultBeanクラスのメソッド名は(getMsgとsetMsgではなく)getMessageとsetMessageである必要があると思います-この優れた記事を参照してください:

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

7
CodeClimber

前回このエラーが発生したのは、使用したJAX-WSのバージョン(2.1.xと2.2.x)の不一致が原因でした。2.1.xバージョンに対してコンパイルしているが、2.2.xに対して実行している、またはその逆の可能性があります。円形。

JDK 6には2.1.xバージョンのJAX-WSが含まれているため、2.2.xの使用を強制するには、承認されたライブラリメカニズムを使用する必要がある場合があることに注意してください。

12
gastush