有没有重用Web服务的方法?Java中的Spring

有没有重用Web服务的方法?Java中的Spring,java,spring,web-services,web.xml,Java,Spring,Web Services,Web.xml,我有一个WebService类,我想在实现一个接口的不同外观/服务中使用它更多次。我试图从一个类中创建两个bean,并将它们映射到两个不同的地址作为两个web服务,但是在这两个地址上都有针对第二个WebService实例的请求。只需更改WSDL的url,就可以由一个客户机实现所有这些web服务,这一点很重要。这意味着所有属性都应该相同(targetNamespace、name、portName、serviceName),否则会在客户端上引发异常 类看起来像这样: @WebService publ

我有一个WebService类,我想在实现一个接口的不同外观/服务中使用它更多次。我试图从一个类中创建两个bean,并将它们映射到两个不同的地址作为两个web服务,但是在这两个地址上都有针对第二个WebService实例的请求。只需更改WSDL的url,就可以由一个客户机实现所有这些web服务,这一点很重要。这意味着所有属性都应该相同(targetNamespace、name、portName、serviceName),否则会在客户端上引发异常

类看起来像这样:

@WebService
public class ServiceX {
    private IFacade facade;

    public ServiceX(IFacade facade) {
         this.facade = facade;
    }
    @WebMethod
    public Result getResult(){
        return facade.getResult();
    }
}
<wss:binding url="/serviceonews">
    <wss:service>
        <ref bean="serviceone" />
    </wss:service>
</wss:binding>

<ws:service id="serviceone">
    <ws:bean>
        <bean class="ServiceX">
            <constructor-arg ref="firstFacade" />
        </bean>
    </ws:bean>
</ws:service>

<wss:binding url="/servicetwows">
    <wss:service>
        <ref bean="servicetwo" />
    </wss:service>
</wss:binding>

<ws:service id="servicetwo">
    <ws:bean>
        <bean class="ServiceX">
            <constructor-arg ref="secondFacade" />
        </bean>
    </ws:bean>
</ws:service>

<bean id="firstFacade" class="FirstFacade" />
<bean id="secondFacade" class="SecondFacade" />
然后我将Spring与XML配置一起使用,如下所示:

@WebService
public class ServiceX {
    private IFacade facade;

    public ServiceX(IFacade facade) {
         this.facade = facade;
    }
    @WebMethod
    public Result getResult(){
        return facade.getResult();
    }
}
<wss:binding url="/serviceonews">
    <wss:service>
        <ref bean="serviceone" />
    </wss:service>
</wss:binding>

<ws:service id="serviceone">
    <ws:bean>
        <bean class="ServiceX">
            <constructor-arg ref="firstFacade" />
        </bean>
    </ws:bean>
</ws:service>

<wss:binding url="/servicetwows">
    <wss:service>
        <ref bean="servicetwo" />
    </wss:service>
</wss:binding>

<ws:service id="servicetwo">
    <ws:bean>
        <bean class="ServiceX">
            <constructor-arg ref="secondFacade" />
        </bean>
    </ws:bean>
</ws:service>

<bean id="firstFacade" class="FirstFacade" />
<bean id="secondFacade" class="SecondFacade" />

以下是web.xml:

<servlet>
    <servlet-name>WSSpringServlet</servlet-name>
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSSpringServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>WSSpringServlet</servlet-name>
    <url-pattern>/serviceonews</url-pattern>
    <url-pattern>/servicetwows</url-pattern>
</servlet-mapping>

WSSpringServlet
com.sun.xml.ws.transport.http.servlet.WSSpringServlet
WSSpringServlet
/服务新闻
/服务网络

我终于找到了解决方案。每次我试图从一个类创建两个bean时,最新的bean就会替换已经存在的bean。 拥有两个相同的wsdl的解决方案不是从一个类中创建两个bean,而是在注释中设置属性。在我的案例中,我需要使用不同的构造函数从基本逻辑继承两个web服务,这是用具体的facade/service填充基本逻辑

@WebService(targetNamespace="http://package/", name="ServiceX", portName="ServiceXPort", serviceName="ServiceName")
public class ServiceX extends ServiceXBase {

    public ServiceX(IFacade facade) {
         super(facade);
    }

    @WebMethod
    public Result getResult(){
        return super.getResult();
    }
}