使用实际bean名称

时间:2016-09-19 16:26:54

标签: web-services jboss cxf

我正在将现有的Webservice端点从WebSphere(8)转换为Jboss(EAP 6.3)。 我的端点创建为EJB3 bean,看起来像这样:     package com.company.project.ridethecar.ejb;

@WebService(
    endpointInterface ="com.company.schemas.project.srm.ridethecarservice.soap_service.v1.RideTheCarSer vicePortType", 
    targetNamespace ="http://schemas.company.com/project/srm/ridethecarservice/soap-service/v1",
    serviceName = "RideTheCarService", 
    portName = "RideTheCarServiceSoap", 
    wsdlLocation = "META-INF/wsdl/RideTheCarService/v2.00/RideTheCarService.wsdl") 
@Stateless(name="RideTheCarBean")
    @Local({com.company.schemas.project.srm.ridethecarservice.soap_service.v1.RideTheCarServicePortType.class})
@Interceptors(SpringBeanAutowiringInterceptor.class)
@Service
@HandlerChain(file="/RideTheCar-handler-chain.xml")
public class RideTheCarBean implements RideTheCarServicePortType
{...}

我还为webService定义了WSDL,我使用CXF maven cxf-codegen-plugin(版本3.1.7)来生成java bean。我的RideTheCarServicePortType将生成如下:

@WebService(targetNamespace = "http://schemas.company.com/project/srm/ridethecarservice/soap-service/v1", name = "RideTheCarServicePortType")
@XmlSeeAlso({com.comapny.schemas.project.messaging.v1.ObjectFactory.class, com.company.schemas.project.srm.ridethecarservice.service.v1.ObjectFactory.class    })
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface RideTheCarServicePortType {

    @WebMethod(action = "http://schemas.company.com/project/srm/ridethecarservice/soap-service/v1/EnvRideTheCarService")
    @Action(input = "http://schemas.company.com/project/srm/ridethecarservice/soap-service/v1/RideValidationRq", output = "http://schemas.company.com/project/srm/ridethecarservice/soap-service/v1/RideValidationRs")
    @WebResult(name = "PbaValidationRs", targetNamespace = "http://schemas.company.com/project/srm/ridethecarservice/service/v1", partName = "RideValidationRs")
public com.company.schemas.project.srm.ridethecarservice.service.v1.RideValidationRs rideValidation(
    @WebParam(partName = "RideValidationRq", name = "RideValidationRq", targetNamespace = "http://schemas.company.com/project/srm/ridethecarservice/service/v1")
    com.company.schemas.project.srm.ridethecarservice.service.v1.RideValidationRq rideValidationRq
);

}

我将所有代码打包为WAR文件,使用maven并将其部署到 JBoss的。 JBoss能够识别EJB和Webservice,但不幸的是它会自动创建一个端点

http://localhost:8080/root/RideTheCarService/ RideTheCarBean ?WSDL。 我期望在没有RideTheCarBean部分的情况下看到http://localhost:8080/root/RideTheCarService?wsdl,因为它在WebSphere中的工作方式与此类似。

请您帮助我理解,为什么Jboss使用bean定义端点,而不是在" servicename"中定义的实际服务名称。 @Webservice的属性。

谢谢。

1 个答案:

答案 0 :(得分:0)

解决方案非常简单 - 必须在EJB包的META-INF文件夹中使用jboss-webservices.xml文件。

<context-root>/RideTheCarService</context-root>
<port-component>
    <ejb-name>RideTheCarBean</ejb-name>
    <port-component-name>RideTheCarSoap</port-component-name>
    <port-component-uri>/RideTheCar</port-component-uri>
</port-component>

这将确保公开RideTheCar网址。