1

我正在开发一个新的网络服务。但我似乎无法找出设置 Web 服务以在 jboss 中部署为 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 文档,它还需要一个 jboss-cxf.xml 用于 cxf 和 spring 的所有配置。

 <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>

并且 spring 配置在这里的 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 beans配置(上面的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,它与 WSDL 文件位于同一目录中。

4

1 回答 1

1

根据这个https://issues.jboss.org/browse/JBWS-3532,这可能是由于 JBOSS_HOME 目录路径中的空间。根据上面链接中 Richard Opalka 的评论,看起来它也已在较新的版本中修复。

我下载了最新的 jboss nightly 并安装在 c:\jboss\ 中,问题消失了。

于 2012-12-19T16:51:08.197 回答