Pour des raisons d'évolution future, j'aimerais mapper un webservice sur plusieurs url dans wildfly 9 Basiquement: un mapping sur "/service/monservice" et sur "/service/1.0/monservice". ainsi en cas d'évolution, la racine a la dernière version et on garde un compatibilité avec les anciennes versions via /x.y. Au client de choisir si il veux avoir la dernière version qui évolue parfois en cassant ou si il se fixe une version précise.

Le webservice est fournis par un StateLess ejb annoté @WebService
Je voudrais éviter déavoir à créer un ejb pour chaque mapping quand ils sont identiques (dans le cas présent 1.0 == latest). J'ai pour le moment essayé deux méthode retrouvée sur le web. La première mapper via web.xml:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
@Stateless
@WebService(name = "XXX", targetNamespace = XXXService.URN_1_0, serviceName = "XXXService", endpointInterface = "com.soap.XXXService")
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
@WebContext(urlPattern = "/service/XXX/1.0", authMethod = "BASIC", secureWSDLAccess = false)
@SecurityDomain("xxx-soap")
@RolesAllowed("integrator")
public class XXXServiceBean extends BaseServiceBean implements XXXService {
et le web.xml
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
    <servlet>
    <servlet-name>XXXService</servlet-name>
    <servlet-class>com.soap.impl.XXXServiceBean</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>XXXService</servlet-name>
    <url-pattern>/service/xxx/1.0</url-pattern>
    <url-pattern>/service/xxx</url-pattern>
</servlet-mapping>

J'au aussi alternativement tenté l'idée du
Code : Sélectionner tout - Visualiser dans une fenêtre à part
@WebServlet(urlPatterns = { "/service/1.0/XXX", "/service/XXX" })
dans les deux cas, wildfly 9 m'a craché à la figure:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Server:server-one] 14:57:31,945 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-5) MSC000001: Failed to start service jboss.deployment.unit."xxx.war".PARSE: org.jboss.msc.service.StartException in service jboss.deployment.unit."xxx.war".PARSE: WFLYSRV0153: Failed to process phase PARSE of deployment "xxx.war"
[Server:server-one] 	at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:163)
[Server:server-one] 	at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
[Server:server-one] 	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
[Server:server-one] 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[Server:server-one] 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[Server:server-one] 	at java.lang.Thread.run(Thread.java:745)
[Server:server-one] Caused by: java.lang.RuntimeException: WFLYUT0037: com.soap.impl.XXXServiceBean has the wrong component type, it cannot be used as a web component
[Server:server-one] 	at org.wildfly.extension.undertow.deployment.WebComponentProcessor.deploy(WebComponentProcessor.java:116)
[Server:server-one] 	at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:156)
[Server:server-one] 	... 5 more
[Server:server-one] 
[Server:server-one] 14:57:31,945 ERROR [org.jboss.as.controller.management-operation] (ServerService Thread Pool -- 83) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "xxx.war")]) - failure description: {"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"xxx.war\".PARSE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"xxx.war\".PARSE: WFLYSRV0153: Failed to process phase PARSE of deployment \"xxx.war\"
[Server:server-one]     Caused by: java.lang.RuntimeException: WFLYUT0037: com.soap.impl.XXXServiceBean has the wrong component type, it cannot be used as a web component"}}
[Server:server-one] 14:57:31,946 ERROR [org.jboss.as.server] (ServerService Thread Pool -- 83) WFLYSRV0021: Deploy of deployment "xxx.war" was rolled back with the following failure message: 
[Server:server-one] {"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"xxx.war\".PARSE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"xxx.war\".PARSE: WFLYSRV0153: Failed to process phase PARSE of deployment \"xxx.war\"
[Server:server-one]     Caused by: java.lang.RuntimeException: WFLYUT0037: com.soap.impl.XXXServiceBean has the wrong component type, it cannot be used as a web component"}}
Pour ce que j'en lit en ligne, c'est supposé marcher dans wildfly 10, mais aucune information pour savoir comment le faire en wildfly 9 . Quelqu'un a une idée? Je voudrait éviter de dupliquer mon ejb mais je craint de devoir passer par là