如何使Web服务实现基于库的界面?

时间:2013-10-31 12:17:12

标签: spring interface jax-ws

在我正在开发的项目中,我们有几个servlet都使用通用API(由我们开发)进行数据库访问等。我们的想法是逐步从共享jar文件中取出这个功能,并将其放在JAX-WS Web服务中,供外部应用程序使用。但是,我现在已经碰壁,因为我们使用spring来初始化我们的servlet,并且jar中定义的接口与Web服务生成的类之间存在类型不匹配,即使它们具有相同的包和名称。

经过进一步检查后,似乎发生了一些我可以看到阻碍的事情:

  1. 来自Web服务的生成源包含其自己的接口版本
  2. 生成的实现源实际上从未实际实现接口,它只是根据请求返回接口类型的对象
    • 这个方法不是静态的,虽然我可以想象会产生问题
  3. 我确实记得读过JAX-B实际上无法处理接口,但我在创建方法时发现这可能不适用于本节
  4. 考虑到这一点,似乎我需要通过调用生成的Web服务方法在spring中构造一个bean,但我无法弄清楚如何。任何其他建议都非常受欢迎,因为删除接口对于测试/可扩展性是不可取的,我能想到的唯一其他解决方案是在构造函数中分配此类而不是spring。

    提前致谢!

2 个答案:

答案 0 :(得分:0)

如果另一个bean没有注明@Primary注释你的@Primary

  

表示当多个候选者有资格自动装配单值依赖项时,应优先考虑bean。如果候选者中只存在一个“主”bean,则它将是自动装配的值。此批注在语义上等同于Spring XML中元素的主要属性。

     

可以在任何直接或间接使用@Component注释的类或使用@Bean注释的方法上使用。

http://docs.spring.io/spring/docs/3.1.x/javadoc-api/org/springframework/context/annotation/Primary.html

答案 1 :(得分:0)

找到通过请求提取实现对象的方法。通过使用MethodInvokingFactoryBean,您可以设置实例并将结果存储起来,就像使用普通bean一样。

示例:

<bean id="implementingObject" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" autowire="byName">
    <property name="targetClass">
        <value>JAXWSServiceClass</value>
    </property>
    <property name="targetMethod">
        <value>getInterfacePortObject</value>
    </property>
</bean>