problem with @WebParam header
simonpl Oct 20, 2010 8:23 AMI've found wierd problem. To show it I've produced example wsdl:
<definitions name="KodMorsaTlumacz" targetNamespace="http://www.example.org/"
    xmlns="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:tns="http://www.example.org/"
    xmlns:ns1="http://www.example.org/schema/" 
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
    <types xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:schema targetNamespace="http://www.example.org/schema/" version="1.0">
            <xs:element name="morse2Txt" type="xs:string" />
            <xs:element name="txt2Morse" type="xs:string" />
            <xs:element name="morse2TxtRsp" type="xs:string" />
            <xs:element name="txt2MorseRsp" type="xs:string" />
            <xs:element name="exampleHeader" type="xs:string" />
        </xs:schema>
    </types>
    <message name="morse2TxtRequest">
        <part element="ns1:morse2Txt" name="morse2Txt" />
        <part name="exampleHeader" element="ns1:exampleHeader" />
    </message>
    <message name="txt2MorseResponse">
        <part element="ns1:txt2MorseRsp" name="txt2morsersp" />
    </message>
    <message name="txt2MorseRequest">
        <part element="ns1:txt2Morse" name="txt2Morse" />
        <part name="exampleHeader" element="ns1:exampleHeader" />
    </message>
    <message name="morse2TxtResponse">
        <part element="ns1:morse2TxtRsp" name="morse2txtrsp" />
    </message>
    <portType name="MorseCode">
        <operation name="morse2Txt" parameterOrder="morse2Txt">
            <input message="tns:morse2TxtRequest" />
            <output message="tns:morse2TxtResponse" />
        </operation>
        <operation name="txt2Morse" parameterOrder="txt2Morse">
            <input message="tns:txt2MorseRequest" />
            <output message="tns:txt2MorseResponse" />
        </operation>
    </portType>
    <binding name="MorseCodeBinding" type="tns:MorseCode">
        <soap:binding style="document"
            transport="http://schemas.xmlsoap.org/soap/http" />
        <operation name="morse2Txt">
            <soap:operation soapAction="morse2Txt" />
            <input>
                <soap:body parts="morse2Txt" use="literal" />
                <soap:header message="tns:morse2TxtRequest" part="exampleHeader"
                    use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
        <operation name="txt2Morse">
            <soap:operation soapAction="txt2Morse" />
            <input>
                <soap:body parts="txt2Morse" use="literal" />
                <soap:header message="tns:txt2MorseRequest" part="exampleHeader"
                    use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
    </binding>
    <service name="MorseCodeTranslator">
        <port binding="tns:MorseCodeBinding" name="MorseCodePort">
            <soap:address location="http://localhost:8080/KodMorsa/MorseCode" />
        </port>
    </service>
</definitions>
I'm running wsconsume with it and I'm getting all the source files correctly, service interface looks like this:
package org.example;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.bind.annotation.XmlSeeAlso;
import org.example.schema.ObjectFactory;
/**
 * This class was generated by the JAX-WS RI.
 * JAX-WS RI 2.1.3-b02-
 * Generated source version: 2.1
 * 
 */
@WebService(name = "MorseCode", targetNamespace = "http://www.example.org/")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@XmlSeeAlso({
    ObjectFactory.class
})
public interface MorseCode {
    /**
     * 
     * @param morse2Txt
     * @param exampleHeader
     * @return
     *     returns java.lang.String
     */
    @WebMethod(action = "morse2Txt")
    @WebResult(name = "morse2TxtRsp", targetNamespace = "http://www.example.org/schema/", partName = "morse2txtrsp")
    public String morse2Txt(
        @WebParam(name = "morse2Txt", targetNamespace = "http://www.example.org/schema/", partName = "morse2Txt")
        String morse2Txt,
        @WebParam(name = "exampleHeader", targetNamespace = "http://www.example.org/schema/", header = true, partName = "exampleHeader")
        String exampleHeader);
    /**
     * 
     * @param txt2Morse
     * @param exampleHeader
     * @return
     *     returns java.lang.String
     */
    @WebMethod(action = "txt2Morse")
    @WebResult(name = "txt2MorseRsp", targetNamespace = "http://www.example.org/schema/", partName = "txt2morsersp")
    public String txt2Morse(
        @WebParam(name = "txt2Morse", targetNamespace = "http://www.example.org/schema/", partName = "txt2Morse")
        String txt2Morse,
        @WebParam(name = "exampleHeader", targetNamespace = "http://www.example.org/schema/", header = true, partName = "exampleHeader")
        String exampleHeader);
}
But when I'm trying to deploy it on the server(JBoss 5.1 AS) I'm getting exceptions:
14:09:37,531 ERROR [AbstractKernelController] Error installing to Real: name=vfsfile:/C:/apps/jboss-5.1.0.GA/server/default/deploy/KodMorsaTopDown2.war/ state=PreReal mode=Manual requiredState=Real
org.jboss.deployers.spi.DeploymentException: Error during deploy: vfsfile:/C:/apps/jboss-5.1.0.GA/server/default/deploy/KodMorsaTopDown2.war/
at org.jboss.deployers.spi.DeploymentException.rethrowAsDeploymentException(DeploymentException.java:49)
at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:177)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1439)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1157)
at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1098)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:781)
at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702)
at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117)
at org.jboss.system.server.profileservice.hotdeploy.HDScanner.scan(HDScanner.java:362)
at org.jboss.system.server.profileservice.hotdeploy.HDScanner.run(HDScanner.java:255)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.jboss.ws.metadata.wsdl.WSDLException: javax.wsdl.WSDLException: WSDLException: faultCode=INVALID_WSDL: Could not determine element name from header: {http://example.org/}MorseCode_morse2Txt->exampleHeader
at org.jboss.ws.tools.wsdl.WSDLDefinitionsFactory.parse(WSDLDefinitionsFactory.java:155)
at org.jboss.ws.metadata.umdm.ServiceMetaData.getWsdlDefinitions(ServiceMetaData.java:293)
at org.jboss.ws.metadata.builder.jaxws.JAXWSWebServiceMetaDataBuilder.buildWebServiceMetaData(JAXWSWebServiceMetaDataBuilder.java:174)
at org.jboss.ws.metadata.builder.jaxws.JAXWSServerMetaDataBuilder.setupProviderOrWebService(JAXWSServerMetaDataBuilder.java:50)
at org.jboss.ws.metadata.builder.jaxws.JAXWSMetaDataBuilderJSE.buildMetaData(JAXWSMetaDataBuilderJSE.java:61)
at org.jboss.wsf.stack.jbws.UnifiedMetaDataDeploymentAspect.start(UnifiedMetaDataDeploymentAspect.java:64)
at org.jboss.wsf.framework.deployment.DeploymentAspectManagerImpl.deploy(DeploymentAspectManagerImpl.java:129)
at org.jboss.wsf.container.jboss50.deployer.ArchiveDeployerHook.deploy(ArchiveDeployerHook.java:76)
at org.jboss.wsf.container.jboss50.deployer.AbstractWebServiceDeployer.internalDeploy(AbstractWebServiceDeployer.java:60)
at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50)
at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171)
... 24 more
Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=INVALID_WSDL: Could not determine element name from header: {http://example.org/}MorseCode_morse2Txt->exampleHeader
at org.jboss.ws.tools.wsdl.WSDL11Reader.processBindingReference(WSDL11Reader.java:1520)
at org.jboss.ws.tools.wsdl.WSDL11Reader.processBindingInput(WSDL11Reader.java:1433)
at org.jboss.ws.tools.wsdl.WSDL11Reader.processBindingOperation(WSDL11Reader.java:1384)
at org.jboss.ws.tools.wsdl.WSDL11Reader.processBindingOperations(WSDL11Reader.java:1344)
at org.jboss.ws.tools.wsdl.WSDL11Reader.processBinding(WSDL11Reader.java:1173)
at org.jboss.ws.tools.wsdl.WSDL11Reader.processPort(WSDL11Reader.java:1681)
at org.jboss.ws.tools.wsdl.WSDL11Reader.processPorts(WSDL11Reader.java:1666)
at org.jboss.ws.tools.wsdl.WSDL11Reader.processServices(WSDL11Reader.java:1636)
at org.jboss.ws.tools.wsdl.WSDL11Reader.processDefinition(WSDL11Reader.java:182)
at org.jboss.ws.tools.wsdl.WSDLDefinitionsFactory.parse(WSDLDefinitionsFactory.java:129)
... 34 more
14:09:37,531 WARN [HDScanner] Failed to process changes
org.jboss.deployers.client.spi.IncompleteDeploymentException: Summary of incomplete deployments (SEE PREVIOUS ERRORS FOR DETAILS):
*** DEPLOYMENTS IN ERROR: Name -> Error
vfsfile:/C:/apps/jboss-5.1.0.GA/server/default/deploy/KodMorsaTopDown2.war/ -> org.jboss.deployers.spi.DeploymentException: Error during deploy: vfsfile:/C:/apps/jboss-5.1.0.GA/server/default/deploy/KodMorsaTopDown2.war/
DEPLOYMENTS IN ERROR:
Deployment "vfsfile:/C:/apps/jboss-5.1.0.GA/server/default/deploy/KodMorsaTopDown2.war/" is in error due to the following reason(s): javax.wsdl.WSDLException: WSDLException: faultCode=INVALID_WSDL: Could not determine element name from header: {http://example.org/}MorseCode_morse2Txt->exampleHeader
at org.jboss.deployers.plugins.deployers.DeployersImpl.checkComplete(DeployersImpl.java:993)
at org.jboss.deployers.plugins.deployers.DeployersImpl.checkComplete(DeployersImpl.java:939)
at org.jboss.deployers.plugins.main.MainDeployerImpl.checkComplete(MainDeployerImpl.java:873)
at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.checkComplete(MainDeployerAdapter.java:128)
at org.jboss.system.server.profileservice.hotdeploy.HDScanner.scan(HDScanner.java:369)
at org.jboss.system.server.profileservice.hotdeploy.HDScanner.run(HDScanner.java:255)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Especially interesting is this part:
faultCode=INVALID_WSDL: Could not determine element name from header: {http://example.org/}MorseCode_morse2Txt->exampleHeader
I was playing with it for a while and I've discovered that when I change:
@WebService(name = "MorseCode", targetNamespace = "http://www.example.org/")
to
@WebService(name = "MorseCode", targetNamespace = "http://example.org/") (target namespace after http:// have to be the same as name of the java package)
it can be deployed.
Any ideas about this strange bug ?? Should I post it as an issue in the official bug track?
All hints will be appreciated.
Thanks in advance,
Simon
 
     
    