我正在将现有的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的属性。
谢谢。
答案 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网址。