2016-09-19 6 views
0

WebSphere(8)からJboss(EAP 6.3)への既存のWebサービスエンドポイントを変換しています。 エンドポイントがEJB3 beanとして作成され、次のようになります。 package com.company.project.ridethecar.ejb;EJB3ベースのWebサービスエンドポイントが実際のBean名で生成されました

@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を持っていると私は、Java Beanを生成するために、CXFのmaven CXF-コード生成・プラグイン(バージョン3.1.7)を使用しています。私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やWebサービスを識別することが可能であるが、残念ながらそれは自動的に

http://localhost:8080/root/RideTheCarService/RideTheCarBean?WSDLなどのエンドポイントを作成します。 私はhttp://localhost:8080/root/RideTheCarService?wsdlをRideTheCarBeanの部分なしで見ることができます。これはWebSphereのように機能していたためです。

なぜJbossが@Webserviceの "servicename"属性で定義された実際のサービス名ではなく、Beanを使用してエンドポイントを定義しているのか理解してください。

ありがとうございます。

答えて

0

ソリューションはかなりシンプルでした.JBoss-webservices.xmlファイルをEJBパッケージのMETA-INFフォルダに使用しなければなりませんでした。

<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 URLが露出されるようになります。

関連する問題