如何正确消费生成的 Web Service? (阿帕奇 CXF)

How to correctly consume a produced Web Service? (Apache CXF)

我创建了一个 SOAP WS 并将其部署在本地主机上。在同一台服务器上,我想创建一个 Web 应用程序,它向 Web 服务发送 XML 请求,然后操作数据库中的数据。

我是否必须重新生成所有必要的 java 类 (wsimport) 才能使用 Web 服务,或者是否有任何其他方法可以做到这一点?生成的 类 弄乱了我的项目。

您可以使用 URL、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"));

    }

}

请记住,如果它们不在同一个 war 中,您需要将 Web 服务端点接口复制到将调用您的 Web 服务的 Web 应用程序。此外,此示例假定您的 Web 服务采用字符串参数和 returns 字符串。如果您使用用户定义的类型,则需要使用 JAXB/XMLBeans 等从模式生成 类