繁体   English   中英

在jboss中将cxf Web服务配置为7

[英]configuring a cxf web service in jboss as 7

我正在开发一个新的Web服务。 但是我似乎无法找出设置要在jboss中部署的Web服务的最佳方法(7)。

根据jboss文档,这是web.xml。

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  version="2.5"> 

<servlet>
    <servlet-name>testService</servlet-name>
    <servlet-class>com.sgb.testService.ws.web.TestService</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>testService</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

根据jboss文档,对于cxf和spring的所有配置,还需要jboss-cxf.xml。

 <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:cxf="http://cxf.apache.org/core" 
xmlns:jaxws="http://cxf.apache.org/jaxws" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:wsa="http://cxf.apache.org/ws/addressing" 
xmlns:http="http://cxf.apache.org/transports/http/configuration" 
xmlns:sec="http://cxf.apache.org/configuration/security" 
xsi:schemaLocation="
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
 http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd 
 http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd 
 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd 
 http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd ">

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />

<!--  import spring application context configurations -->
<import resource="classpath:META-INF/spring/applicationContext-ws.xml" />

<jaxws:endpoint id="testService" 
    implementor="com.sgb.testService.ws.web.TestService"
    address="/testService" >
    <!-- 
    address="http://localhost:8080/testService">
    -->
    <jaxws:properties>
        <entry key="schema-validation-enabled" value="true" />
    </jaxws:properties>
    <jaxws:invoker>
        <bean class="org.jboss.wsf.stack.cxf.InvokerJSE" />
    </jaxws:invoker>
</jaxws:endpoint>

弹簧配置在此处的ApplicationContext-ws.xml中定义。

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop" 
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee" 
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/aop      http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/context      http://www.springframework.org/schema/context/spring-context-3.1.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
    http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

<context:property-placeholder location="classpath*:META-INF/spring/*.properties" />

<!--  
import the common configurations from core sub-module
which contains the declarations for Datasource, EntityManagerFactory & PersistanceUnit 
-->
<import resource="applicationContext-core.xml" />
<import resource="applicationContext-jpa.xml" />


<!-- setting up multiple packages to scan for components -->
<context:component-scan base-package="com.sgb.testService.ws.service" />


<!-- Declare the Transaction Manager -->
<bean id="transactionManager" 
    class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>


<!-- declare transactions as annotation driven -->
<tx:annotation-driven 
    transaction-manager="transactionManager" />

以上看起来正确吗? 我有什么想念的吗?

特定问题:为了在jboss AS 7中部署基于cxf的Web服务,需要在哪里定义spring bean配置(上面的ApplicationContext-ws.xml)?

有人可以指出我最近的(2012)示例或教程。 我在网上找到的大多数示例似乎都过时了,在jboss或spring网站上似乎找不到合适的教程...

谢谢。 -SGB

编辑添加:错误消息似乎表明在部署war文件时,jboss试图将wsdl发布到JBOSS_HOME / standalone / data / wsdl / TestService.war,但由于找不到架构(xsd文件)而失败。 作为bot模式,wsdl位于WEB-INF / wsdl /目录中,这有点奇怪。 其中JBOSS_HOME = C:\\ Program Files(x86)\\ Apache Software Foundation \\ jboss-as-7.1.1.Final \\

错误信息:

15:56:09,146 INFO  [org.apache.cxf.service.factory.ReflectionServiceFactoryBean] (MSC service thread 1-4) Creating Service {http://www.sgb.com/Slm/ES
/TestServiceIdentifier}TestServiceIdentifier from WSDL: WEB-INF/wsdl/TestService.wsdl
15:56:09,238 INFO  [org.apache.cxf.endpoint.ServerImpl] (MSC service thread 1-4) Setting the server's publish address to be http://localhost:8080/eucl
id-ws
15:56:09,266 INFO  [org.jboss.wsf.stack.cxf.deployment.WSDLFilePublisher] (MSC service thread 1-4) WSDL published to: JBOSS_HOME/standalone/data/wsdl/testService-ws.war    /TestService.wsdl
15:56:09,270 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC00001: Failed to start service jboss.deployment.unit."testService-ws.war".INSTA
LL: org.jboss.msc.service.StartException in service jboss.deployment.unit."testService-ws.war".INSTALL: Failed to process phase INSTALL of deployment "eucl
id-ws.war"
    at    org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_33]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_33]
    at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_33]
 Caused by: java.lang.RuntimeException: Cannot publish wsdl to: JBOSS_HOME\standalone\data\
wsdl\testService-ws.war\TestService.wsdl
    at org.jboss.wsf.stack.cxf.deployment.WSDLFilePublisher.publishWsdlFiles(WSDLFilePublisher.java:107)
    at org.jboss.wsf.stack.cxf.deployment.EndpointImpl.publishContractToFilesystem(EndpointImpl.java:222)
    at org.jboss.wsf.stack.cxf.deployment.EndpointImpl.doPublish(EndpointImpl.java:93)
    at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:239)
    at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:509)
    at org.jboss.wsf.stack.cxf.configuration.NonSpringBusHolder.configure(NonSpringBusHolder.java:117)
    at org.jboss.wsf.stack.cxf.deployment.aspect.BusDeploymentAspect.startDeploymentBus(BusDeploymentAspect.java:113)
    at org.jboss.wsf.stack.cxf.deployment.aspect.BusDeploymentAspect.start(BusDeploymentAspect.java:66)
    at org.jboss.as.webservices.deployers.AspectDeploymentProcessor.deploy(AspectDeploymentProcessor.java:74)
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1
 .Final]
    ... 5 more
Caused by: java.io.FileNotFoundException: JBOSS_HOME\standalone\data\wsdl\testService-ws.war\TestServiceIdentifier.xsd (The system cannot find the file specified)
    at java.io.FileInputStream.open(Native Method) [rt.jar:1.6.0_33]
    at java.io.FileInputStream.<init>(FileInputStream.java:120) [rt.jar:1.6.0_33]
    at java.io.FileInputStream.<init>(FileInputStream.java:79) [rt.jar:1.6.0_33]
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70) [rt.jar:1.6.0_33]
        at     sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161) [rt.jar:1.6.0_33]
        at java.net.URL.openStream(URL.java:1010) [rt.jar:1.6.0_33]
    at org.jboss.ws.common.utils.AbstractWSDLFilePublisher.publishSchemaImports(AbstractWSDLFilePublisher.java:243)
    at org.jboss.ws.common.utils.AbstractWSDLFilePublisher.publishSchemaImports(AbstractWSDLFilePublisher.java:250)
    at org.jboss.ws.common.utils.AbstractWSDLFilePublisher.publishSchemaImports(AbstractWSDLFilePublisher.java:250)
    at org.jboss.wsf.stack.cxf.deployment.WSDLFilePublisher.publishWsdlFiles(WSDLFilePublisher.java:94)
    ... 14 more

15:56:09,343 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS015870:     Deploy of deployment "testService-ws.war" was rolled back with failure
 message {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"testService-ws.war\".INSTALL" => "org.jboss.msc.service.StartException in service jbos
s.deployment.unit.\"testService-ws.war\".INSTALL: Failed to process phase INSTALL of deployment \"testService-ws.war\""}}
15:56:09,413 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015877: Stopped deployment testService-ws.war in 70ms
15:56:09,414 INFO  [org.jboss.as.controller] (DeploymentScanner-threads - 2)     JBAS014774: Service status report
JBAS014777:   Services which failed to start:      service jboss.deployment.unit."testService-ws.war".INSTALL: org.jboss.msc.service.StartException in serv
ice jboss.deployment.unit."testService-ws.war".INSTALL: Failed to process phase INSTALL of deployment "testService-ws.war"

15:56:09,421 ERROR [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) {"JBAS014653: Composite operation failed and was rolled ba
ck. Steps that failed:" => {"Operation step-2" => {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"testService-ws.war\".INSTALL" => "org.jboss.m
sc.service.StartException in service jboss.deployment.unit.\"testService-ws.war\".INSTALL: Failed to process phase INSTALL of deployment \"testService-ws.war\""

}}}}

从上面看,根本原因似乎是这样的:

Caused by: java.io.FileNotFoundException: JBOSS_HOME\standalone\data\wsdl\testService-ws.war\TestServiceIdentifier.xsd (The system cannot find the file specified)

似乎能够找到WSDL,但找不到它所使用的相应xsd,该xsd与WSDL文件位于同一目录中。

根据此https://issues.jboss.org/browse/JBWS-3532 ,这可能是由于JBOSS_HOME目录路径中的空格所致。 根据Richard Opalka在上面的链接中的评论,它似乎也已在更新的版本中修复。

我下载了最新的jboss夜间版本,并安装在c:\\ jboss \\中,该问题消失了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM