2013-10-04 43 views
0

使用契约优先方法,我使用CXF从WSDL生成了一个Web服务。CXF生成的Web服务的入口点是什么?

Web服务通过Tomcat 7正常加载并正确响应SOAP消息。

但是,虽然我理解从WSDL和XSD自动生成的Java类,但我不知道我知道入口点的位置(例如,我可以使用enable validation)。

由于熟悉的main()方法只是默认入口点,并且是not mandatory,因此我假设CXF为此使用了不同的入口点。

当我构建Web服务(使用包含CXF插件一个pom.xml),仅产生2包(足以建立工作 Web服务)的WSDL

  1. 一本身仅包含3个Java模块:ObjectFactory.java,MyBinding.java,MyService.java
  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.s[email protected]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似乎隐藏实现细节非常好,但我想知道在哪里挂钩我的初始化定制。

回答

2

CXFServlet通常是您服务的入口点。 Tomcat将HTTP请求路由到您的web应用程序,并且servlet映射定义接收请求的Servlet。如果你想在请求到达CXF前拦截请求,你可以写一个Servlet Filter

对于简单验证需求,CXF确实支持schema validation via configuration

如果您想在邮件到达您的服务之前对邮件做些更有趣的事情,并从CXF的功能中受益,我建议您熟悉CXF拦截器。它们非常强大,可以在到达服务之前以及退出服务之后的任何阶段拦截消息。 CXF文档有details on the phases and instructions on writing an Interceptor

+0

感谢您提供一个优秀的教育性答案。至于通过配置*进行的*模式验证,由于我已经可以看到一些由Web服务完成的验证,因此我假定它默认开启,因此可能不需要' Withheld

+0

好的,得到了​​它(关于通过配置*进行的模式验证):事实证明,对'cxf.xml'的引用有点令人困惑,因为他们真正指的是无论如何都必须存在的“应用程序上下文”XML,这可能被命名为**任何** ...我的名字命名为“豆类”。xml',我必须做的所有事情都是为了将​​模式验证添加到已定义的 ' Withheld