如何使用wsgen工具进行SOAP / JMS Web服务

时间:2015-03-18 09:11:04

标签: web-services websphere ibm-rad

我正在按照教程 [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服务的任何其他有用的资料。

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

}

2 个答案:

答案 0 :(得分:2)

这似乎是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。

答案 1 :(得分:0)

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