Java 如何创建web服务代理?我们可以生成@Endpoints吗?

Java 如何创建web服务代理?我们可以生成@Endpoints吗?,java,web-services,spring,proxy,jaxb,Java,Web Services,Spring,Proxy,Jaxb,我正在使用审计的web服务代理(稍后使用缓存=创建自己的响应),我需要生成@Endpoints(这样只需转发,即至少调用远程web服务或虚拟)。封送处理/取消封送处理似乎是必要的,因为代理将向请求添加“某物” 我们将使用SpringWS和JAXB。已获取代理web服务的所有XSD和静态WSDL 有什么提示吗?有人做过类似的事情吗?你是怎么做到的 有没有一种简单的方法可以使用spring或spring集成来实现这一点 提前感谢。这应该可以使用Spring WS和Spring集成: 使用Spring

我正在使用审计的web服务代理(稍后使用缓存=创建自己的响应),我需要生成@Endpoints(这样只需转发,即至少调用远程web服务或虚拟)。封送处理/取消封送处理似乎是必要的,因为代理将向请求添加“某物”

我们将使用SpringWS和JAXB。已获取代理web服务的所有XSD和静态WSDL

有什么提示吗?有人做过类似的事情吗?你是怎么做到的

有没有一种简单的方法可以使用spring或spring集成来实现这一点


提前感谢。

这应该可以使用Spring WS和Spring集成:

使用SpringWS,您可以为远程WS创建一个代理类,围绕一个与WS对话的API,该API负责将请求编组为xml并解组响应

使用Spring Integration,您可以使用,但需要使用消息网关,它将充当您的代理,如下所示:

<int:gateway id="wsproxy"  service-interface="..ProxyInterface" default-request-channel="requestChannel" default-reply-channel="replyChannel"/>

<int-ws:outbound-gateway id="wsGateway" request-channel="requestChannel" uri="http://serviceURL" marshaller="someMarshaller" unmarshaller="someUnmarshaller"/>


但是,我建议使用WebserviceTemplate的第一种方法,因为这里没有非常复杂的集成需求。

这应该可以同时使用Spring WS和Spring integration:

使用SpringWS,您可以为远程WS创建一个代理类,围绕一个与WS对话的API,该API负责将请求编组为xml并解组响应

使用Spring Integration,您可以使用,但需要使用消息网关,它将充当您的代理,如下所示:

<int:gateway id="wsproxy"  service-interface="..ProxyInterface" default-request-channel="requestChannel" default-reply-channel="replyChannel"/>

<int-ws:outbound-gateway id="wsGateway" request-channel="requestChannel" uri="http://serviceURL" marshaller="someMarshaller" unmarshaller="someUnmarshaller"/>


但是,我推荐使用WebserviceTemplate的第一种方法,因为您在这里没有非常复杂的集成需求。

今天,我可以告诉您在没有spring集成的情况下我们是如何进行的。我们发现了两种不同的方法来生成@Endpoint类

1)使用XSLTFreemarker我们在预编译阶段生成了端点类源代码。XSLT转换遍历所有WSDL文件,创建一个摘要文件,然后用于生成源代码

2)使用Javassist我们复制了模板类,然后生成了有关JAXB2Marshaller实例内容的方法,最后使用FactoryBean实例化了对象,这一切都在服务器启动时进行

这里我们遇到的问题是一组以表单形式编写的XSD文件,这些文件导致根对象的生成没有@XmlRootAnnotation。我们的Javassist版本在内部使用Java1.4(没有泛型),所以我们对XJC使用全局定制文件,并在根对象上强制使用@XmlRootAnnotation


这两种解决方案都有各自的优缺点,但都比使用ESB更简单。

今天,我可以告诉大家,没有spring集成,我们是如何进行的。我们发现了两种不同的方法来生成@Endpoint类

1)使用XSLTFreemarker我们在预编译阶段生成了端点类源代码。XSLT转换遍历所有WSDL文件,创建一个摘要文件,然后用于生成源代码

2)使用Javassist我们复制了模板类,然后生成了有关JAXB2Marshaller实例内容的方法,最后使用FactoryBean实例化了对象,这一切都在服务器启动时进行

这里我们遇到的问题是一组以表单形式编写的XSD文件,这些文件导致根对象的生成没有@XmlRootAnnotation。我们的Javassist版本在内部使用Java1.4(没有泛型),所以我们对XJC使用全局定制文件,并在根对象上强制使用@XmlRootAnnotation

这两种解决方案各有优缺点,但都比使用ESB更简单