1

我正在开发一个带有审计的 Web 服务代理(稍后使用缓存 = 创建自己的响应),我需要生成 @Endpoints(这样只会转发,即调用远程 Web 服务或至少虚拟)。对于代理来说,编组/解组似乎是必要的,它将为请求添加“一些东西”......

我们将使用 spring-ws 和 JAXB。获取代理 Web 服务的所有 XSD 和静态 WSDL。

周围有什么提示吗?有人在做类似的事情吗?你怎么样?

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

提前致谢..

4

2 回答 2

1

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

使用 Spring WS,您可以为远程 WS 创建一个代理类,包装一个org.springframework.ws.client.core.WebServiceTemplate来与 WS 对话——它有 API 负责将请求编组到 xml 并解组回复。

使用 Spring Integration,您可以使用出站 Web 服务网关,但您需要在其前面使用消息网关,该网关将充当您的代理,如下所示:

<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 的第一种方法,因为您在这里没有非常复杂的集成需求。

于 2012-06-05T21:39:40.610 回答
0

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

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

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

我们在这里遇到的问题是一组以格式编写的 XSD 文件,导致根对象在没有 @XmlRootAnnotation 的情况下生成。我们内部的 Javassist 版本与 Java 1.4(无泛型)一起使用,因此我们对 XJC 使用全局自定义文件并在根对象上强制使用 @XmlRootAnnotation。

这两种解决方案各有利弊,但都比使用 ESB 更简单。

于 2013-06-03T01:36:17.307 回答