如何将 wsgen 工具用于 SOAP/JMS Web 服务

How to use wsgen tool for SOAP/JMS Web Services

我正在按照教程 [here] 在 RAD 中创建 Web 服务应用程序。但是,当我尝试在 EchoSOAPImpl.java:

中添加新函数时
@WebMethod
public String getInput(String input) {
    return "Your input is: " + input;
}

然后使用wsgen生成必要的java文件:

wsgen -s ejbModule -cp build\classes -d build com.ibm.was.wssample.sei.echo.EchoSOAPImpl

,失败并显示此错误消息:

error: Could not create declaration for annotation type javax.ejb.Stateless

我尝试删除注释,但是整个项目显示错误:

An EJB module must contain one or more enterprise beans.m

我对在 RAD 中构建 Web 服务感到非常沮丧。提供的教程或学习资料很少。还请提供有关 RAD 中 Web 服务的任何其他有用材料。

EchoSOAPImpl.java

package com.ibm.was.wssample.sei.echo;

@javax.ejb.Stateless
@javax.jws.WebService(endpointInterface = "com.ibm.was.wssample.sei.echo.EchoServicePortType", targetNamespace = "http://com/ibm/was/wssample/sei/echo/", serviceName = "EchoService", portName = "EchoServicePort")
public class EchoSOAPImpl implements EchoServicePortType {

@Override
public EchoStringResponse echoOperation(EchoStringInput parameter) {
    ...
    return response;
}

@Override
public String getInput(String input) {
    return "Your input is: " + input;
}

}

EchoServicePortType

@WebService(name = "EchoServicePortType", targetNamespace = "http://com/ibm/was/wssample/sei/echo/")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@XmlSeeAlso( { ObjectFactory.class })
public interface EchoServicePortType {

@WebMethod(action = "echoOperation")
@WebResult(name = "echoStringResponse", targetNamespace = "http://com/ibm/was/wssample/sei/echo/", partName = "parameter")
public EchoStringResponse echoOperation(
        @WebParam(name = "echoStringInput", targetNamespace = "http://com/ibm/was/wssample/sei/echo/", partName = "parameter") EchoStringInput parameter);

@WebMethod(action = "getInput")
@WebResult(name = "getInputResponse", targetNamespace = "http://com/ibm/was/wssample/sei/echo/", partName = "parameter")
public String getInput(@WebParam(name = "getInputInput", targetNamespace = "http://com/ibm/was/wssample/sei/echo/", partName = "parameter") String getInput);

}

这似乎是 wsgen 中的错误。我建议您在 wsgen 类路径中添加包含 @Stateless 的 IBM EJB API jar,例如:

wsgen -s ejbModule -cp {ibm javaeJB jar}:build\classes -d build com.ibm.was.wssample.sei.echo.EchoSOAPImpl

这是假设您在使用 RAD 的同时也在使用 Websphere。如果不添加标准 Java EE jar。

您需要将 Java EE API jar 添加到类路径中,如下所示: wsgen -wsdl -cp .;javaee-api-6.0.jar com.vvirlan.MyWsEjb