我使用CXF與春發佈和消費Web服務我在的JBoss 5.1。一切正常。存在任何<jaxws:endpoint />註釋?
然而,有這就是我覺得非常乏味的一件事:把一個JAXWS:在applicationContext.xml中端點標籤爲每個WebService的。
真的沒有辦法做到這一點與註釋?謝謝大家。
我使用CXF與春發佈和消費Web服務我在的JBoss 5.1。一切正常。存在任何<jaxws:endpoint />註釋?
然而,有這就是我覺得非常乏味的一件事:把一個JAXWS:在applicationContext.xml中端點標籤爲每個WebService的。
真的沒有辦法做到這一點與註釋?謝謝大家。
有some annotations配置的東西,你也可以把<jaxws:endpoint>
。聲明CXF端點的註釋很好。
您可以使用代碼而不是Spring XML來配置端點。如果你有很多可以分解的重複配置,這可能很方便。或者如果您在不同的環境中配置了不同的端點。
例如:
@Autowired var authImpl: Auth = _
@Autowired var faultListener: FaultListener = _
def initWebServices() {
var sf: JaxWsServerFactoryBean = _
val propMap = mutable.HashMap[String, AnyRef]("org.apache.cxf.logging.FaultListener"->faultListener.asInstanceOf[AnyRef])
sf = new JaxWsServerFactoryBean
sf.setServiceBean(authImpl)
sf.setAddress("/auth")
sf.setServiceName(new QName("http://auth.ws.foo.com/", "auth", "AuthService"))
sf.setProperties(propMap)
sf.create
// more services...
隨着時間通,出現了一些新的可能性。使用CXF/SpringBoot(SpringBoot:1.2.3,CXF:3.10,Spring:4.1.6)有一個很好的選擇,爲了擺脫cxf-servlet.xml中的jaxws:endpoint配置,如下所示: jonashackt在nabble.com中指出。但是,只有在應用程序中只有一個端點時(至少我沒有成功配置多個端點),該解決方案纔有可能。
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public ServletRegistrationBean dispatcherServlet() {
CXFServlet cxfServlet = new CXFServlet();
return new ServletRegistrationBean(cxfServlet, "/api/*");
}
@Bean(name="cxf")
public SpringBus springBus() {
return new SpringBus();
}
@Bean
public MyServicePortType myService() {
return new MyServiceImpl();
}
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), myService());
endpoint.publish("/MyService");
return endpoint;
}
其中MyServicePortType是具有@WebService註釋的類。然後這個Endpoint被稱爲URL的「localhost:8080/api/MyService」
當然,這些@Bean聲明可以放在任何其他spring配置類中。
在違背複製原來的解決方案,我建議使用,而不是直接的工廠方法來實例化總線(CXF-Bean)的「新SpringBus()」:
BusFactory.newInstance().createBus()
就像你說的,會非常好,如果存在端點的註釋。我不明白這是怎麼產生的。 – 2011-04-08 23:42:30