Ok, so I managed to patch the CXF code as follows:
if (action == null && addressing != null) {
operation.getInput().addExtensionAttribute(JAXWSAConstants.WSAM_ACTION_QNAME,
inputAction);
operation.getInput().addExtensionAttribute(JAXWSAConstants.WSAW_ACTION_QNAME,
inputAction);
MessageInfo output = operation.getOutput();
if (output != null) {
operation.getOutput().addExtensionAttribute(JAXWSAConstants.WSAM_ACTION_QNAME,
computeAction(operation, "Response"));
operation.getOutput().addExtensionAttribute(JAXWSAConstants.WSAW_ACTION_QNAME,
computeAction(operation, "Response"));
}
} else {
MessageInfo input = operation.getInput();
This allows deployment of the endpoints to progress further. However, after that I came across a new problem, this time to do with AS7 server integration. My class inlcudesa resource injection for the web service context
@Resource
private WebServiceContext webServiceCtx;
Unfortunately, AS7 desn't appear to be able to recognise that this is a WS injection. I get the following error during deployment:
02:10:14,440 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC00001: Failed to start service jboss.deployment.unit."ws-t11-client.war".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."ws-t11-client.war".INSTALL: Failed to process phase INSTALL of deployment "ws-t11-client.war"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:121)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1675)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_21]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_21]
at java.lang.Thread.run(Thread.java:619) [:1.6.0_21]
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: No component found for type 'javax.xml.ws.WebServiceContext'
at org.jboss.as.ee.component.ComponentTypeInjectionSource.getResourceValue(ComponentTypeInjectionSource.java:55)
at org.jboss.as.ee.component.ModuleJndiBindingProcessor.addJndiBinding(ModuleJndiBindingProcessor.java:177)
at org.jboss.as.ee.component.ModuleJndiBindingProcessor$1.handle(ModuleJndiBindingProcessor.java:145)
at org.jboss.as.ee.component.ClassDescriptionTraversal.run(ClassDescriptionTraversal.java:52)
at org.jboss.as.ee.component.ModuleJndiBindingProcessor.deploy(ModuleJndiBindingProcessor.java:117)
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:115)
... 4 more
The stack trace shows that the AS is expecting to inject this resource from JNDi. When it looks at the WAR deployment it cannot find a JNDI resource with type 'javax.xml.ws.WebServiceContext' associated with the deployment so it barfs. So, it looks like the AS7/JBossWS integration has not yet provided a mechanism for injecting a WebServiceContext into an endpoint implementation. Has anyone looked at this issue yet? Is there any estimate of when it will be supported? I assume this requires a JIRA