如何正确使用生成的Web服务? (Apache CXF)

时间:2015-02-14 11:05:42

标签: java web-services soap cxf

我创建了一个SOAP WS并将其部署在localhost上。在同一台服务器上,我想创建一个Web应用程序,它将XML请求发送到Web服务,从而处理数据库中的数据。

我是否必须重新生成所有必需的java类(wsimport)以使用Web服务,或者还有其他方法吗?生成的类弄乱了我的项目。

1 个答案:

答案 0 :(得分:2)

您可以使用网址,QName和服务。

假设您有一个服务端点接口,如下所示:

@WebService
@SOAPBinding(style = Style.RPC)

    public interface HelloWorld{

        @WebMethod 
        String getString(String name);

    }

服务端点实现如下:

@WebService(endpointInterface = "com.bot.ws.HelloWorld")
public class HelloWorldImpl implements HelloWorld {

    @Override
    public String getString(String name) {
        return "Hello World received input = " + name;
    }

}

您可以按如下方式调用此Web服务:

public class WSClient {

    public static void main(String[] args) throws Exception {

        URL url = new URL("http://localhost:8080/ws/hello?wsdl");

        QName qname = new QName("http://bot.ws/", "HelloWorldImplService");

        Service service = Service.create(url, qname);

        HelloWorld hello = service.getPort(HelloWorld.class);

        System.out.println(hello.getString("bot"));

    }

}

请注意,您需要将您的网络服务enpoint界面复制到可以调用您的网络服务的网络应用,如果他们不在同一场战争中。此外,此示例假定您的Web服务接受String参数并返回String。如果使用用户定义的类型,则需要使用JAXB / XMLBeans等从模式生成类。