我正在开发一个带有审计的Web服务代理(稍后使用缓存=创建自己的响应),我需要生成@Endpoints(这样只会转发,即调用远程Web服务或至少调用虚拟机)。编组/解编似乎是必要的,因为代理会在请求中添加“某些东西”......
我们要使用spring-ws和JAXB。获得代理Web服务的所有XSD和静态WSDL。
周围的任何提示?有人做类似的事吗?你是怎么做到的?
有一种简单的方法可以使用弹簧或弹簧集成来实现这一目标吗?
提前致谢..
答案 0 :(得分:1)
这应该可以使用Spring WS和Spring Integration:
使用Spring WS,您可以为远程WS创建一个代理类,包围org.springframework.ws.client.core.WebServiceTemplate以与WS通信 - 它具有API来处理将请求编组到xml并解组响应。< / p>
使用Spring Integration,您可以使用outbound Webservices gateway,但是您需要使用消息传递网关,它将充当您的代理,沿着这些方向:
<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的方法,因为这里没有非常复杂的集成需求。
答案 1 :(得分:0)
今天我可以告诉我们如何在没有弹簧整合的情况下继续前进。我们发现了两种不同的生成@Endpoint类的方法。
1)使用 XSLT 和 Freemarker ,我们在 预编译中生成了端点类源阶段。 XSLT转换遍历所有WSDL文件以创建一个摘要文件,然后用于生成源。
2)使用 Javassist 我们复制了模板类,然后生成了关于 JAXB2Marshaller 实例内容的方法,最后使用实例化了对象FactoryBean ,全部在服务器 启动 。
我们遇到的问题是在表单中编写的XSD文件集,导致生成的根对象没有@XmlRootAnnotation。 Javassist版本我们内部使用Java 1.4(没有泛型),因此我们使用XJC的全局自定义文件并强制在根对象上使用@XmlRootAnnotation。
这两种解决方案各有利弊,但两者都比使用ESB更简单。