Re: An Exception occurs when use wsdl extension in the port
A test case (attached to a JIRA) would be good if you cannot figure this out. However, here is a pointer: When CXF looks in the WSDL to determine the transport factory, it looks at the FIRST extensor on the port that has a namespace that matches a transport factory. In your first example, it would be soap and thus would match the soap transport. In the second, it would be soapjms and thus probably matches the JMS transport and not the soap transport. The jms transport probably doesn't look for soap:address. Not sure on the best course of action to solve this. :-( Possibly the soap binding could reset the address on the transport or something. Would be good to check if this is the case before diving in too deep. Dan On Sat July 4 2009 7:51:40 am liucong wrote: Hi all, When I implement the WSDL usage for SOAP/JMS, I encountered an exception. I create an service and invoke it using wsdl-first. If the wsdl file looks like this[1] : wsdl:definitions wsdl:service name=JMSGreeterService wsdl:port binding=tns:JMSGreeterPortBinding name=GreeterPort soap:address location=jms:jndi:dynamicQueues/test.cxf.jmstransport.queue?jndiInitialCon textFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactoryamp;jndiC onnectionFactoryName=ConnectionFactoryamp;jndiURL=tcp://localhost:61616amp ;targetService=greeterService / soapjms:timeToLive1000/soapjms:timeToLive /wsdl:port /wsdl:service /wsdl:definitions This service works well. But if the wsdl file looks like this[2] : wsdl:definitions wsdl:service name=JMSGreeterService wsdl:port binding=tns:JMSGreeterPortBinding name=GreeterPort soapjms:timeToLive1000/soapjms:timeToLive soap:address location=jms:jndi:dynamicQueues/test.cxf.jmstransport.queue?jndiInitialCon textFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactoryamp;jndiC onnectionFactoryName=ConnectionFactoryamp;jndiURL=tcp://localhost:61616amp ;targetService=greeterService / /wsdl:port /wsdl:service /wsdl:definitions The service is created correctly, but there is an error happen when I invoke this service. By debugging, I find that JMSTransportFactory.getConduit(EndpointInfo endpointInfo, EndpointReferenceType target)'s target parameter is null. It should be jms:jndi:dynamicQueues/test.cxf.jmstransport.queue?jndiInitialContextFacto ry=org.apache.activemq.jndi.ActiveMQInitialContextFactoryamp;jndiConnection FactoryName=ConnectionFactoryamp;jndiURL=tcp://localhost:61616amp;targetSe rvice=greeterService. I think there are someting wrong with port parsing in wsdl. Any ideas? best regards liu -- Daniel Kulp dk...@apache.org http://www.dankulp.com/blog
Re: An Exception occurs when use wsdl extension in the port
Thank you, Dan. I just found the problem as you said. I can make the JMSTransportFactory implement WSDLEndpointFactory interface. And then the SOAPAddress can be used to create createEndpointInfo. Then the problem will be solved. I'm trying to do this. liu Daniel Kulp wrote: A test case (attached to a JIRA) would be good if you cannot figure this out. However, here is a pointer: When CXF looks in the WSDL to determine the transport factory, it looks at the FIRST extensor on the port that has a namespace that matches a transport factory. In your first example, it would be soap and thus would match the soap transport. In the second, it would be soapjms and thus probably matches the JMS transport and not the soap transport. The jms transport probably doesn't look for soap:address. Not sure on the best course of action to solve this. :-( Possibly the soap binding could reset the address on the transport or something. Would be good to check if this is the case before diving in too deep. Dan On Sat July 4 2009 7:51:40 am liucong wrote: Hi all, When I implement the WSDL usage for SOAP/JMS, I encountered an exception. I create an service and invoke it using wsdl-first. If the wsdl file looks like this[1] : wsdl:definitions wsdl:service name=JMSGreeterService wsdl:port binding=tns:JMSGreeterPortBinding name=GreeterPort soap:address location=jms:jndi:dynamicQueues/test.cxf.jmstransport.queue?jndiInitialCon textFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactoryamp;jndiC onnectionFactoryName=ConnectionFactoryamp;jndiURL=tcp://localhost:61616amp ;targetService=greeterService / soapjms:timeToLive1000/soapjms:timeToLive /wsdl:port /wsdl:service /wsdl:definitions This service works well. But if the wsdl file looks like this[2] : wsdl:definitions wsdl:service name=JMSGreeterService wsdl:port binding=tns:JMSGreeterPortBinding name=GreeterPort soapjms:timeToLive1000/soapjms:timeToLive soap:address location=jms:jndi:dynamicQueues/test.cxf.jmstransport.queue?jndiInitialCon textFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactoryamp;jndiC onnectionFactoryName=ConnectionFactoryamp;jndiURL=tcp://localhost:61616amp ;targetService=greeterService / /wsdl:port /wsdl:service /wsdl:definitions The service is created correctly, but there is an error happen when I invoke this service. By debugging, I find that JMSTransportFactory.getConduit(EndpointInfo endpointInfo, EndpointReferenceType target)'s target parameter is null. It should be jms:jndi:dynamicQueues/test.cxf.jmstransport.queue?jndiInitialContextFacto ry=org.apache.activemq.jndi.ActiveMQInitialContextFactoryamp;jndiConnection FactoryName=ConnectionFactoryamp;jndiURL=tcp://localhost:61616amp;targetSe rvice=greeterService. I think there are someting wrong with port parsing in wsdl. Any ideas? best regards liu
Re: An Exception occurs when use wsdl extension in the port
Hi Dan, Thank you for your good advice. I think keeping the soap stuff in the soap binding is a very good idea. https://issues.apache.org/jira/browse/CXF-2264?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=12727756#action_12727756 https://issues.apache.org/jira/browse/CXF-2264?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=12727756#action_12727756 liu Daniel Kulp wrote: A test case (attached to a JIRA) would be good if you cannot figure this out. However, here is a pointer: When CXF looks in the WSDL to determine the transport factory, it looks at the FIRST extensor on the port that has a namespace that matches a transport factory. In your first example, it would be soap and thus would match the soap transport. In the second, it would be soapjms and thus probably matches the JMS transport and not the soap transport. The jms transport probably doesn't look for soap:address. Not sure on the best course of action to solve this. :-( Possibly the soap binding could reset the address on the transport or something. Would be good to check if this is the case before diving in too deep. Dan On Sat July 4 2009 7:51:40 am liucong wrote: Hi all, When I implement the WSDL usage for SOAP/JMS, I encountered an exception. I create an service and invoke it using wsdl-first. If the wsdl file looks like this[1] : wsdl:definitions wsdl:service name=JMSGreeterService wsdl:port binding=tns:JMSGreeterPortBinding name=GreeterPort soap:address location=jms:jndi:dynamicQueues/test.cxf.jmstransport.queue?jndiInitialCon textFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactoryamp;jndiC onnectionFactoryName=ConnectionFactoryamp;jndiURL=tcp://localhost:61616amp ;targetService=greeterService / soapjms:timeToLive1000/soapjms:timeToLive /wsdl:port /wsdl:service /wsdl:definitions This service works well. But if the wsdl file looks like this[2] : wsdl:definitions wsdl:service name=JMSGreeterService wsdl:port binding=tns:JMSGreeterPortBinding name=GreeterPort soapjms:timeToLive1000/soapjms:timeToLive soap:address location=jms:jndi:dynamicQueues/test.cxf.jmstransport.queue?jndiInitialCon textFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactoryamp;jndiC onnectionFactoryName=ConnectionFactoryamp;jndiURL=tcp://localhost:61616amp ;targetService=greeterService / /wsdl:port /wsdl:service /wsdl:definitions The service is created correctly, but there is an error happen when I invoke this service. By debugging, I find that JMSTransportFactory.getConduit(EndpointInfo endpointInfo, EndpointReferenceType target)'s target parameter is null. It should be jms:jndi:dynamicQueues/test.cxf.jmstransport.queue?jndiInitialContextFacto ry=org.apache.activemq.jndi.ActiveMQInitialContextFactoryamp;jndiConnection FactoryName=ConnectionFactoryamp;jndiURL=tcp://localhost:61616amp;targetSe rvice=greeterService. I think there are someting wrong with port parsing in wsdl. Any ideas? best regards liu