0

コントラクト優先のアプローチを使用して、CXF を使用して WSDL から Web サービスを生成しました。

Web サービスは Tomcat 7 で正常にロードされ、SOAP メッセージに適切に応答します。

しかし、WSDL および XSD から自動生成された Java クラスについては理解していますが、エントリ ポイントがどこにあるかはわかりません (たとえば、検証を有効にするため)。

おなじみの main() メソッドはデフォルトのエントリ ポイントにすぎず、必須ではないため、CXF はその目的のために別のエントリ ポイントを使用すると想定しています。

(CXF プラグインを含む pom.xml を使用して) Web サービスをビルドすると、2 つのパッケージのみが生成されます (動作する Web サービスを確立するのに十分です)。

  1. 1 つは WSDL 自体用で、3 つの Java モジュールのみを含みます: ObjectFactory.java、MyBinding.java、MyService.java
  2. 2 つ目は XSD スキーマ用で、スキーマで定義されたすべてのタイプの Java クラスを含みます。

という名前のクラスを拡張する MyService.java が、Serviceそのエントリ ポイントを探すべき場所ではないかと疑っています。しかし、それはどのように「魔法」を行うのでしょうか?

ところで、Tomcat コンソールからこれを把握しようとしましたが、起動時のすべての Web サービス ログです。

Oct 4, 2013 11:27:47 AM org.springframework.web.context.ContextLoader initWebApplicationContext
INFO: Root WebApplicationContext: initialization started

Oct 4, 2013 11:27:47 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing Root WebApplicationContext: startup date [Fri Oct 04 11:27:47 EDT 2013]; root of context hierarchy

Oct 4, 2013 11:27:47 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [beans.xml]

Oct 4, 2013 11:27:47 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [META-INF/cxf/cxf.xml]

Oct 4, 2013 11:27:47 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [META-INF/cxf/cxf-extension-soap.xml]

Oct 4, 2013 11:27:47 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [META-INF/cxf/cxf-servlet.xml]

Oct 4, 2013 11:27:47 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@17392df: defining beans [org.springframework.context.
annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.anno
tation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,cxf,org.apache.cxf.bus.spring.BusWiringBeanF
actoryPostProcessor,org.apache.cxf.bus.spring.Jsr250BeanPostProcessor,org.apache.cxf.bus.spring.BusExtensionPostProcessor,org.apache.cxf.binding.soap.SoapBindin
gFactory,org.apache.cxf.binding.soap.SoapTransportFactory,org.apache.cxf.binding.soap.customEditorConfigurer,myserviceWS,myserviceBinding]; root of factor
y hierarchy

Oct 4, 2013 11:27:47 AM org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL
INFO: Creating Service {http://myws.example.com/ns}MyService from WSDL: file:/C:/Users/Daniel/myws/src/main/wsdl/myws.wsdl

Oct 4, 2013 11:27:48 AM org.apache.cxf.endpoint.ServerImpl initDestination
INFO: Setting the server's publish address to be /myservice/soap

Oct 4, 2013 11:27:48 AM org.springframework.web.context.ContextLoader initWebApplicationContext
INFO: Root WebApplicationContext: initialization completed in 1107 ms

CXF は実装の詳細を非常にうまく隠しているようですが、初期化のカスタマイズをフックする場所を知りたいです。

4

1 に答える 1

2

CXFServlet is generally the entry point for your service. Tomcat routes the HTTP request to your webapp, and the servlet-mapping defines the Servlet that receives the request. If you want to intercept the request before it reaches CXF, you could write a Servlet Filter.

For simple validation needs, CXF does support schema validation via configuration.

If you want to do fancier things to a message before it reaches your service, and benefit from the functionality of CXF, I would recommend becoming familiar with CXF Interceptors. They are very powerful, and can intercept a message at any number of phases before it reaches the service, and after it exits the service. The CXF documentation has details on the phases and instructions on writing an Interceptor.

于 2013-10-04T21:48:26.483 に答える