Re: Capturing Jms headers data
Hi Eamonn, Eamonn Dwyer wrote: Hi Liu thanks for that. So can you tell what I would be able to use to capture the JMS headers when the server is replying to the client if I shouldn't use org.apache.cxf.jms.server.reply.headers? Actually when is org.apache.cxf.jms.server.reply.headers used? Sorry, I think there is not a way to capture the JMS headers when the server is replying to the client. The only way is that the client get the replying message's headers. org.apache.cxf.jms.server.reply.headers is used in the implementation. Also is my assumption for the client side : then on the client side use org.apache.cxf.jms.client.repsonse.headers and org.apache.cxf.jms.client.reply.headers correct? In the client, org.apache.cxf.jms.client.request.headers and org.apache.cxf.jms.client.repsonse.headers are used. After the client has sent the JMS message, you can check the org.apache.cxf.jms.client.request.headers to get the JMS headers. You can use an interceptor to check the org.apache.cxf.jms.client.repsonse.headers to get the reply JMS message headers. Thanks for the help Eamonn Date: Fri, 11 Sep 2009 09:13:32 +0800 From: liucon...@gmail.com To: dev@cxf.apache.org Subject: Re: Capturing Jms headers data Hi, Eamonn Dwyer wrote: Hi I would like to write an interceptor to capture all the JMS header data. Would the following work? for an inbound interceptor at the server side ... String buffer = new StringBuffer(); JMSMessageHeadersType jmsMessageHeadersType = (JMSMessageHeadersType)message.get(org.apache.cxf.jms.server.request.headers); buffer.append(JMSCorrelationID + = + jmsMessageHeadersType.getJMSCorrelationID()+ ); buffer.append(JMSMessageID + = + jmsMessageHeadersType.getJMSMessageID()+ ); and so on for all the attributes in JMSMessageHeadersType. It is OK for the inbound interceptor. The JMS transport first get the values of JMS header data and store them in the org.apache.cxf.jms.server.request.headers. So the interceptor can get these data. For the outbound interceptor at the server side the type would be got from JMSMessageHeadersType jmsMessageHeadersType = (JMSMessageHeadersType)message.get(org.apache.cxf.jms.server.reply.headers); It is not right for the outbound interceptor. Because when the interceptor uses the value of org.apache.cxf.jms.server.reply.headers before the implementation generates it. and then on the client side use org.apache.cxf.jms.client.repsonse.headers and org.apache.cxf.jms.client.reply.headers Thanks for any help/suggestions, Eamonn _ Get 30 Free Emoticons for your Windows Live Messenger http://www.livemessenger-emoticons.com/funfamily/en-ie/ _ With Windows Live, you can organize, edit, and share your photos. http://www.microsoft.com/ireland/windows/windowslive/products/photo-gallery-edit.aspx
Re: Capturing Jms headers data
Hi, Eamonn Dwyer wrote: Hi I would like to write an interceptor to capture all the JMS header data. Would the following work? for an inbound interceptor at the server side ... String buffer = new StringBuffer(); JMSMessageHeadersType jmsMessageHeadersType = (JMSMessageHeadersType)message.get(org.apache.cxf.jms.server.request.headers); buffer.append(JMSCorrelationID + = + jmsMessageHeadersType.getJMSCorrelationID()+ ); buffer.append(JMSMessageID + = + jmsMessageHeadersType.getJMSMessageID()+ ); and so on for all the attributes in JMSMessageHeadersType. It is OK for the inbound interceptor. The JMS transport first get the values of JMS header data and store them in the org.apache.cxf.jms.server.request.headers. So the interceptor can get these data. For the outbound interceptor at the server side the type would be got from JMSMessageHeadersType jmsMessageHeadersType = (JMSMessageHeadersType)message.get(org.apache.cxf.jms.server.reply.headers); It is not right for the outbound interceptor. Because when the interceptor uses the value of org.apache.cxf.jms.server.reply.headers before the implementation generates it. and then on the client side use org.apache.cxf.jms.client.repsonse.headers and org.apache.cxf.jms.client.reply.headers Thanks for any help/suggestions, Eamonn _ Get 30 Free Emoticons for your Windows Live Messenger http://www.livemessenger-emoticons.com/funfamily/en-ie/
Re: test suite patch.
Hi, The list of changes is as follows: (1) Some SOAPFault processing int cxf-rt-bindings-soap subproject. (2) To generate the CorrelationID in the client of jms transport according to the following rules. And I change the systest for the correlationid according to this. userCID - userCID userCID + conduitSelectorPrefix - userCID userCID + conduitSelectorPrefix + useConduitIdSelector(true) - userCID userCID + conduitSelectorPrefix + useConduitIdSelector(false) - userCID conduitSelectorPrefix + useConduitIdSelector(true) - conduitSelectorPrefix + conduitId + index conduitSelectorPrefix + useConduitIdSelector(false) - conduitSelectorPrefix + index useConduitIdSelector(true) - conduitId + index useConduitIdSelector(false) - the request message's messageID -'s left side is the condition. -'s right side is rule for generation of CorrelationID. userCID means that the client gives a CorrelationID. conduitSelectorPrefix means that the client configures in the wsdl. useConduitIdSelector means that the client configures in the wsdl. conduitId means that the string generated by the jms-tranport's JMSConduit. index is a autoincreasing number which indicates the uniqueness of the CorrelationID. (3) The JMSListener of the response message. (4) Some small changes about JMSMessage's properties which is not right for specification. (5) Add test suite tests(http://dev.w3.org/2008/ws/soapjms/testcases/)(0001-1001). And build the framework for test suite tests. About the JMS low API to check the message: (1) I have use SOAPJMSTestSuiteClientTest and SOAPJMSTestSuiteServerTest to use JMS low API, and it does work. But it is a little complicated. (2) I can get all the information for the JMSMessageHeadersType of the Message. So it is ok for tests. (3) If I use JMS low API, it is also ok. Use (1) to build all of the tests. About JMSConduit unit test: I commented it, because I can't get the response message because the server's JMS Listener doesn't build. I think the test is not usefull. best regards JIRA (https://issues.apache.org/jira/browse/CXF-2253) Willem Jiang wrote: Woo, it's a big patch. You did a amazing job over a night :) I noticed you commented some JMSConduit unit test. Can you give me a list of changes? It will help you to double check the back compatibility of the old JMS configuration. I found you didn't use the JMS low API to check the message, can you tell me the reason why you don't do that? Since it's big patch, can you write a brief description to highlight the changes that you made ? Finally, you can submit the patch to CXF JIRA with the description of patch and let other people to have a look at this :) Cheers, Willem liucong wrote: Hi I have created a test suite patch for jms-transport. And I have modified some bugs in the code.
Re: How to generate the CorrelationID in the client in jms transport?
Hi Willem Jiang wrote: Hi, You can choice what you want to generate the correlationID, and you just need to make sure the CorrelationID is unique. In you proposal, you give the user a choice to set the correlationID from the JMSMessageHeader which he set, it's OK for me. For the useConduitIdSelector, it's just for the client side to choice if it uses the MessageID pattern or CorrelationID pattern. useConduitIdSelector is just one of the three condition(userCID==null,conduitSelectorPrefix==null, useConduitIdSelector == false) for using MessageID pattern. There is not a clear definition on the server side, such as if server side is set to use MessageID pattern , it will ignore the CorrelationID which is already set on the request JMS message header to generation the response message CorrelationID. So I think we need add this server side definition as while. I think the messageId or Correlation ID pattern is determined by the client. On the server side, if the JMSMessage's CorrelationID is not null, we use CorrelationID pattern, if not, we use MessageID pattern. The current implement uses this rule. BTW, we need to add some documents for use about it CorrelationID generation rule on the wiki to make sure every body knows what is going on there :) Any other thoughts? Willem liucong wrote: Hi, I'm very confused with the CorrelationID which is generated by the jms-transport. The configuration piece as follows: service name=HelloWorldServiceRuntimeCorrelationIDStaticPrefix port binding=tns:HelloWorldPortBinding name=HelloWorldPortRuntimeCorrelationIDStaticPrefixEng jms:clientConfig conduitSelectorPrefix=com.mycompany.eng: useConduitIdSelector=true/ jms:server messageSelector=JMSCorrelationID LIKE 'com.mycompany.eng:%'/ jms:address ... /jms:address /port /service I think the rules generating the CorrelationID should be as follows: userCID - userCID userCID + conduitSelectorPrefix - userCID userCID + conduitSelectorPrefix + useConduitIdSelector(true) - userCID userCID + conduitSelectorPrefix + useConduitIdSelector(false) - userCID conduitSelectorPrefix + useConduitIdSelector(true) - conduitSelectorPrefix + conduitId + index conduitSelectorPrefix + useConduitIdSelector(false) - conduitSelectorPrefix + index useConduitIdSelector(true) - conduitId + index useConduitIdSelector(false) - the request message's messageID -'s left side is the condition. -'s right side is rule for generation of CorrelationID. userCID means that the client gives a CorrelationID. conduitSelectorPrefix means that the client configures in the wsdl. useConduitIdSelector means that the client configures in the wsdl. conduitId means that the string generated by the jms-tranport's JMSConduit. index is a autoincreasing number which indicates the uniqueness of the CorrelationID. Is it right? I want to use this rules for the generation of CorrelationID. best regards
How to generate the CorrelationID in the client in jms transport?
Hi, I'm very confused with the CorrelationID which is generated by the jms-transport. The configuration piece as follows: service name=HelloWorldServiceRuntimeCorrelationIDStaticPrefix port binding=tns:HelloWorldPortBinding name=HelloWorldPortRuntimeCorrelationIDStaticPrefixEng jms:clientConfig conduitSelectorPrefix=com.mycompany.eng: useConduitIdSelector=true/ jms:server messageSelector=JMSCorrelationID LIKE 'com.mycompany.eng:%'/ jms:address ... /jms:address /port /service I think the rules generating the CorrelationID should be as follows: userCID - userCID userCID + conduitSelectorPrefix - userCID userCID + conduitSelectorPrefix + useConduitIdSelector(true) - userCID userCID + conduitSelectorPrefix + useConduitIdSelector(false) - userCID conduitSelectorPrefix + useConduitIdSelector(true) - conduitSelectorPrefix + conduitId + index conduitSelectorPrefix + useConduitIdSelector(false) - conduitSelectorPrefix + index useConduitIdSelector(true) - conduitId + index useConduitIdSelector(false) - the request message's messageID -'s left side is the condition. -'s right side is rule for generation of CorrelationID. userCID means that the client gives a CorrelationID. conduitSelectorPrefix means that the client configures in the wsdl. useConduitIdSelector means that the client configures in the wsdl. conduitId means that the string generated by the jms-tranport's JMSConduit. index is a autoincreasing number which indicates the uniqueness of the CorrelationID. Is it right? I want to use this rules for the generation of CorrelationID. best regards
request-response patterns.
Hi, Some information about JMS Correlation ID patten and Message ID pattern on request-response patterns (http://edocs.bea.com/alsb/docs25/interopjms/MsgIDPatternforJMS.html). By digging into the code about jms-transport, I know the current jms-transport uses the Correlation ID Pattern. But the SOAP/JMS specification uses Message ID Pattern. What should I do? 1. To keep Correlation ID Pattern. But it is not compatible with the specification. 2. To use Message ID Pattern. I see some code which use spring-jms, I can't get the id of the message which is sent by spring-jms. I don't know how to get the message id which is used to correlated the response message. Thank you for your sugguest in advance. liu
Re: request-response patterns.
Hi, Should I change to use Message ID Pattern and make it compatible with the specification? liucong wrote: Hi, Some information about JMS Correlation ID patten and Message ID pattern on request-response patterns (http://edocs.bea.com/alsb/docs25/interopjms/MsgIDPatternforJMS.html). By digging into the code about jms-transport, I know the current jms-transport uses the Correlation ID Pattern. But the SOAP/JMS specification uses Message ID Pattern. What should I do? 1. To keep Correlation ID Pattern. But it is not compatible with the specification. 2. To use Message ID Pattern. I see some code which use spring-jms, I can't get the id of the message which is sent by spring-jms. I don't know how to get the message id which is used to correlated the response message. Thank you for your sugguest in advance. liu
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
An Exception occurs when use wsdl extension in the port
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?jndiInitialContextFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactoryamp;jndiConnectionFactoryName=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?jndiInitialContextFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactoryamp;jndiConnectionFactoryName=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?jndiInitialContextFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactoryamp;jndiConnectionFactoryName=ConnectionFactoryamp;jndiURL=tcp://localhost:61616amp;targetService=greeterService. I think there are someting wrong with port parsing in wsdl. Any ideas? best regards liu
Re: How to add wsdl extension for SOAP/JMS.
Hi, I am writing a plugin for xjc. First I just modify the cxf-xjc-ts and cxf-xjc-ts-test, and make it work with the -Xwsdlextension, not -Xts. The pom file is also changed. And it works rightly. Then I copy the modified projects into cxf-xjc-wsdlextension and cxf-xjc-wsdlextension-test, and make the cxf-xjc-ts the same with the subversion. It failed. The exception is: [INFO] [INFO] Building Apache CXF XJC WSDL Extension Plugin Tests [INFO]task-segment: [install] [INFO] [INFO] [cxf-xml2fastinfoset:xml2fastinfoset {execution: xml2fastinfoset}] [INFO] [jaxb2:xjc {execution: default}] [INFO] Generating source... [INFO] [ERROR] BUILD ERROR [INFO] [INFO] unrecognized parameter -Xwsdlextension What's wrong? Do I need to do more configuration for ths xjc plugin? thanks! Daniel Kulp wrote: Liu, I think for stuff that are simple (basically, complexTypes with simpleContent and simpleType object), you cannot extend TExtensibilityElementImpl. Instead, you would need to make it implement ExtensibilityElement interface and add the QName and required fields and such. Dan On Wed July 1 2009 12:18:15 pm liucong wrote: Hi, I do a simple experiment about the design sugguest by Dan. First, I use jaxb, not xjc. I think they have the principle. The schema like this[1]: xs:element name=deliveryMode type=soapjms:deliveryModeType / xs:complexType name=deliveryModeType xs:simpleContent xs:extension base=xs:string /xs:extension /xs:simpleContent /xs:complexType The generated class for DeliveryModeType like this[2]: @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = deliveryModeType, propOrder = { value }) public class DeliveryModeType{ @XmlValue protected String value; /** * Gets the value of the value property. * * @return * possible object is * {...@link String } * */ public String getValue() { return value; } /** * Sets the value of the value property. * * @param value * allowed object is * {...@link String } * */ public void setValue(String value) { this.value = value; } public boolean isSetValue() { return (this.value!= null); } } The DeliveryModeType doesn't extend TExtensibilityElementImpl. So I just modify the class and make it look like this[3]: @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = deliveryModeType, propOrder = { value }) public class DeliveryModeType extends TExtensibilityElementImpl{ @XmlValue protected String value; /** * Gets the value of the value property. * * @return * possible object is * {...@link String } * */ public String getValue() { return value; } /** * Sets the value of the value property. * * @param value * allowed object is * {...@link String } * */ public void setValue(String value) { this.value = value; } public boolean isSetValue() { return (this.value!= null); } } Then when I publish a service, I get an exception[4] Creating Service {http://cxf.apache.org/jms_greeter}JMSGreeterService from WSDL: file:./wsdl/jms_greeter.wsdl Exception in thread main javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service. at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:275) at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:209) at org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl .java:84) at javax.xml.ws.Endpoint.publish(Endpoint.java:47) at demo.jms_greeter.server.Server.init(Server.java:30) at demo.jms_greeter.server.Server.main(Server.java:34) Caused by: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service. at org.apache.cxf.wsdl11.WSDLServiceFactory.init(WSDLServiceFactory.java:93) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFro mWSDL(ReflectionServiceFactoryBean.java:317) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServi ceModel(ReflectionServiceFactoryBean.java:437) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(Reflecti onServiceFactoryBean.java:195) at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFac toryBean.java:163) at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(Abs tractWSDLBasedEndpointFactory.java:100
Re: How to add wsdl extension for SOAP/JMS.
Hi, Dan, Thank you very much for your advice. By some experiments for the WSDL extension. I think it is right that this WSDL extension needs some changes to CXF wsdl processing. And the CXF wsdl processing will supoort the entension in SOAP/JMS. I think this kind of extension is necessary for CXF wsdl processing. Are there any documents which help me finish this kind of extension? thank you! :-) Liu Daniel Kulp wrote: Hmm... I'm not really sure. I don't think there IS a schema that would work properly for this. My gut feeling was something like: xs:complexType name=deliveryModeType xs:simpleContent xs:restriction base=wsdl:tExtensibilityElement xs:enumeration value=PERSISTENT / xs:enumeration value=NON_PERSISTENT / /xs:restriction /xs:simpleContent /xs:complexType but I know that doesn't work. This will probably need some changes to CXF wsdl processing to really get this to work well. Actually, this could provide a good opportunity to cleanup the JAXB WSDL extension mechanism to NOT require that the schema extends the wsdl:tExtensibilityElement type. I'm actually thinking a xjc plugin that would make all the generated types automatically implement the wsdl4j ExtensibiltyElement interface and add the methods/fields for that. That can significantly cleanup the CXF schemas for all the extensors. It would be completely automatic. Dan On Tue June 23 2009 11:51:43 am liucong wrote: Hi, I want to add wsdl extension for SOAP/JMS according to http://www.w3.org/TR/2008/WD-soapjms-20081121/#wsdl-extensions. For example, I want add wsdl extension for DeliveryMode property. I edit the wsdl file like[1]: wsdl:binding name=JMSGreeterPortBinding type=tns:JMSGreeterPortType soap:binding style=document transport=http://www.w3.org/2008/07/soap/bindings/JMS// soapjms:deliveryModePERSISTENT/soapjms:deliveryMode wsdl:operation name=greetMe soap:operation soapAction=test style=document/ wsdl:input name=greetMeRequest soap:body use=literal/ /wsdl:input wsdl:output name=greetMeResponse soap:body use=literal/ /wsdl:output /wsdl:operation ... /wsdl:binding If I add the extension schema like this[2]: xs:element name=deliveryMode type=soapjms:deliveryModeType / xs:complexType name=deliveryModeType xs:complexContent xs:extension base=wsdl:tExtensibilityElement xs:sequence xs:element name=deliveryMode xs:simpleType xs:restriction base=xs:string xs:enumeration value=PERSISTENT / xs:enumeration value=NON_PERSISTENT / /xs:restriction /xs:simpleType /xs:element /xs:sequence /xs:extension /xs:complexContent /xs:complexType But I can't get the extension in the wsdl. If I change the wsdl like this[3]: wsdl:binding name=JMSGreeterPortBinding type=tns:JMSGreeterPortType soap:binding style=document transport=http://www.w3.org/2008/07/soap/bindings/JMS// soapjms:deliveryModesoapjms:deliveryModePERSISTENT/soapjms:deliveryMod e/soapjms:deliveryMode wsdl:operation name=greetMe soap:operation soapAction=test style=document/ wsdl:input name=greetMeRequest soap:body use=literal/ /wsdl:input wsdl:output name=greetMeResponse soap:body use=literal/ /wsdl:output /wsdl:operation ... /wsdl:binding I'll get the result of deliveryMode extension. I think the wsdl extension just can add attributes, element to a extension element in CXF. But I can't get the extension element's value. Is it right? My question is: how to get the extension information in [1]. What does the extension schema look like? thanks. Liu
Re: SOAP/JMS specification for CXF [Project Status]
Hi all, I have submitted a patch for my work in transport-jms. https://issues.apache.org/jira/browse/CXF-2253. It is not complete, and I'll continue to work on it to make it complete. Any suggests are welcome! liu liucong wrote: Hi all, Project Description: SOAP over JMS specification (http://www.w3.org/TR/soapjms/) is aimed at a set of standards for the transport of SOAP messages over JMS (Java Message Service). The main purpose is to ensure interoperability between the implementations of different Web services vendors. CXF does support SOAP over JMS, but it does not meet the current draft specification defined at http://www.w3.org/TR/soapjms/ and instead uses some proprietary formats, headers, URL formats, etc. This project would update the SOAP/JMS support in CXF to be completely specification compliant. Any advice or help are welcome! Project Information: 1.Project Status: http://wiki.apache.org/general/soapjms4cxf 2.Project Code: http://github.com/liucong/jms4cxf2/tree/master 3.Project JIRA task: https://issues.apache.org/jira/browse/CXF-2253 What I have done: 1.Implement a simple JMS URI (http://tools.ietf.org/html/draft-merrick-jms-uri-05 ) 2.Integrate the JMS URI into current jms-transport. It is compatible with the specification. 3.Modify the JMS Header Properties and JMS Properties and make it compatible with the specification. 4.Modify some code about SOAP fault and MEPs. Liu
How to add wsdl extension for SOAP/JMS.
Hi, I want to add wsdl extension for SOAP/JMS according to http://www.w3.org/TR/2008/WD-soapjms-20081121/#wsdl-extensions. For example, I want add wsdl extension for DeliveryMode property. I edit the wsdl file like[1]: wsdl:binding name=JMSGreeterPortBinding type=tns:JMSGreeterPortType soap:binding style=document transport=http://www.w3.org/2008/07/soap/bindings/JMS// soapjms:deliveryModePERSISTENT/soapjms:deliveryMode wsdl:operation name=greetMe soap:operation soapAction=test style=document/ wsdl:input name=greetMeRequest soap:body use=literal/ /wsdl:input wsdl:output name=greetMeResponse soap:body use=literal/ /wsdl:output /wsdl:operation ... /wsdl:binding If I add the extension schema like this[2]: xs:element name=deliveryMode type=soapjms:deliveryModeType / xs:complexType name=deliveryModeType xs:complexContent xs:extension base=wsdl:tExtensibilityElement xs:sequence xs:element name=deliveryMode xs:simpleType xs:restriction base=xs:string xs:enumeration value=PERSISTENT / xs:enumeration value=NON_PERSISTENT / /xs:restriction /xs:simpleType /xs:element /xs:sequence /xs:extension /xs:complexContent /xs:complexType But I can't get the extension in the wsdl. If I change the wsdl like this[3]: wsdl:binding name=JMSGreeterPortBinding type=tns:JMSGreeterPortType soap:binding style=document transport=http://www.w3.org/2008/07/soap/bindings/JMS// soapjms:deliveryModesoapjms:deliveryModePERSISTENT/soapjms:deliveryMode/soapjms:deliveryMode wsdl:operation name=greetMe soap:operation soapAction=test style=document/ wsdl:input name=greetMeRequest soap:body use=literal/ /wsdl:input wsdl:output name=greetMeResponse soap:body use=literal/ /wsdl:output /wsdl:operation ... /wsdl:binding I'll get the result of deliveryMode extension. I think the wsdl extension just can add attributes, element to a extension element in CXF. But I can't get the extension element's value. Is it right? My question is: how to get the extension information in [1]. What does the extension schema look like? thanks. Liu
Re: How to implement the SOAP Fault for JMS Transport?
Hi, I have added a simple interceptor in the SOAP binding. If the transport uri is http://www.w3.org/2008/07/soap/bindings/JMS/, the jms interceptor will be added. But I have some question for that: 1. I feel a little weird to add a transport-related interceptor here. 2. Program Problem. I have declared some constants in the jms-transport module. I need use some of these constants in the jms interceptor. I think it is a little weird to add project dependency to jms-transport for soap-binding module. Do I need to declare these constants again in the soap-binding module? 3. How to deal with soapjms:isFault property. If the soapjms:isFault is true, it indicates that the response is a SOAP fault. How to deal with this property. best regards, liu Daniel Kulp Writes: On Wed June 10 2009 4:38:37 am liucong wrote: So, the JMS transport just copy JMS message properties to somewhere(For example, Message.PROTOCOL_HEADERS map). Then the SOAP binding add some extra interceptors (How to add these interceptors?) to deal with these properties (check the properties, throw some SOAP Faults, and so on). Does it work? Is it Ok? Yep. That seems right. To add your interceptors, it would be in the SoapBindingFactory class. The createBinding(BindingInfo) method is where the interceptors for the SOAP stuff is setup.That would be the starting place to look. Dan Daniel Kulp Writes: Ideally, to me, this type of fault mapping needs to be in the SOAP binding, not the JMS transport.The JMS transport needs to be somewhat independent of soap so that it's usable for things like XML over JMS and possibly even some resty things. Basically, the SOAP binding should examine it's transportId and if it's the SOAP/JMS spec defined ID, it should add some extra interceptors to handle the mapping of the soap specific things into the non-soap specific things in the transport. For example: all the funky JMS headers that the SOAP/JMS spec requires should be done from an interceptor provided by the SOAP binding (put them in the Message.PROTOCOL_HEADERS map) that the JMS transport would just copy across. That said, I really haven't read the SOAP/JMS spec in very much detail so I'm not sure if it's completely possible. :-) Dan On Mon June 8 2009 10:54:18 pm liucong wrote: Hi, Willem Jiang Writes: Hi, I think you mean how to throw the fault from the JMS transport. Basically , if you throw the fault from a CXF interceptor, CXF's interceptors chain will take care of it and build the fault message and throw it out. If you want to check the Content type , you could write an interceptor and load it with your soap jms transport. How to load an interceptor with my soap jms transport? Is there any material for help? Thank you. But I think you could take the soap binding (SoapBindingFactory) as an example, and put this kind of checking as a work of soap jms binding. Just my 2 cents, Willem liucong wrote: Hi all, When I implement the SOAP Over JMS Specification, I don’t know how to implement SOAP fault for it. I use the org.apache.cxf.interceptor.Fault to record the Fault information. For example, I create a Fault instance for SOAP fault subcode contentTypeMismatch (http://www.w3.org/TR/2008/WD-soapjms-20080723/#binding-faults). If I check the fault the cxf-rt-transports-jms module, I don’t know how to deal with the fault which is checked out. If I added an Interceptor for JMS transport, I can use the interceptor to deal with the fault. Is It right? If it is Ok, how is the interceptor added to the interceptors according to whether the jms transport is used or not? Are there any materials for interceptors, phases, and phase order? Thank you very much! Best regards, Liu
SOAP/JMS specification for CXF [Project Status]
Hi all, Project Description: SOAP over JMS specification (http://www.w3.org/TR/soapjms/) is aimed at a set of standards for the transport of SOAP messages over JMS (Java Message Service). The main purpose is to ensure interoperability between the implementations of different Web services vendors. CXF does support SOAP over JMS, but it does not meet the current draft specification defined at http://www.w3.org/TR/soapjms/ and instead uses some proprietary formats, headers, URL formats, etc. This project would update the SOAP/JMS support in CXF to be completely specification compliant. Any advice or help are welcome! Project Information: 1.Project Status: http://wiki.apache.org/general/soapjms4cxf 2.Project Code: http://github.com/liucong/jms4cxf2/tree/master 3.Project JIRA task: https://issues.apache.org/jira/browse/CXF-2253 What I have done: 1.Implement a simple JMS URI (http://tools.ietf.org/html/draft-merrick-jms-uri-05 ) 2.Integrate the JMS URI into current jms-transport. It is compatible with the specification. 3.Modify the JMS Header Properties and JMS Properties and make it compatible with the specification. 4.Modify some code about SOAP fault and MEPs. Liu
Re: How to implement the SOAP Fault for JMS Transport?
So, the JMS transport just copy JMS message properties to somewhere(For example, Message.PROTOCOL_HEADERS map). Then the SOAP binding add some extra interceptors (How to add these interceptors?) to deal with these properties (check the properties, throw some SOAP Faults, and so on). Does it work? Is it Ok? Daniel Kulp Writes: Ideally, to me, this type of fault mapping needs to be in the SOAP binding, not the JMS transport.The JMS transport needs to be somewhat independent of soap so that it's usable for things like XML over JMS and possibly even some resty things. Basically, the SOAP binding should examine it's transportId and if it's the SOAP/JMS spec defined ID, it should add some extra interceptors to handle the mapping of the soap specific things into the non-soap specific things in the transport. For example: all the funky JMS headers that the SOAP/JMS spec requires should be done from an interceptor provided by the SOAP binding (put them in the Message.PROTOCOL_HEADERS map) that the JMS transport would just copy across. That said, I really haven't read the SOAP/JMS spec in very much detail so I'm not sure if it's completely possible. :-) Dan On Mon June 8 2009 10:54:18 pm liucong wrote: Hi, Willem Jiang Writes: Hi, I think you mean how to throw the fault from the JMS transport. Basically , if you throw the fault from a CXF interceptor, CXF's interceptors chain will take care of it and build the fault message and throw it out. If you want to check the Content type , you could write an interceptor and load it with your soap jms transport. How to load an interceptor with my soap jms transport? Is there any material for help? Thank you. But I think you could take the soap binding (SoapBindingFactory) as an example, and put this kind of checking as a work of soap jms binding. Just my 2 cents, Willem liucong wrote: Hi all, When I implement the SOAP Over JMS Specification, I don’t know how to implement SOAP fault for it. I use the org.apache.cxf.interceptor.Fault to record the Fault information. For example, I create a Fault instance for SOAP fault subcode contentTypeMismatch (http://www.w3.org/TR/2008/WD-soapjms-20080723/#binding-faults). If I check the fault the cxf-rt-transports-jms module, I don’t know how to deal with the fault which is checked out. If I added an Interceptor for JMS transport, I can use the interceptor to deal with the fault. Is It right? If it is Ok, how is the interceptor added to the interceptors according to whether the jms transport is used or not? Are there any materials for interceptors, phases, and phase order? Thank you very much! Best regards, Liu
Re: How to implement the SOAP Fault for JMS Transport?
Hi, Willem Jiang 写道: Hi, I think you mean how to throw the fault from the JMS transport. Basically , if you throw the fault from a CXF interceptor, CXF's interceptors chain will take care of it and build the fault message and throw it out. If you want to check the Content type , you could write an interceptor and load it with your soap jms transport. But I think you could take the soap binding (SoapBindingFactory) as an example, and put this kind of checking as a work of soap jms binding. SoapBindingFactory gets the binding information according to the bindingid, for example, http://schemas.xmlsoap.org/wsdl/soap/. SOAP/JMS may not provide a SOAP JMS binding id or something like that. I think we should not add bindingid, too. Just my 2 cents, Willem liucong wrote: Hi all, When I implement the SOAP Over JMS Specification, I don’t know how to implement SOAP fault for it. I use the org.apache.cxf.interceptor.Fault to record the Fault information. For example, I create a Fault instance for SOAP fault subcode contentTypeMismatch (http://www.w3.org/TR/2008/WD-soapjms-20080723/#binding-faults). If I check the fault the cxf-rt-transports-jms module, I don’t know how to deal with the fault which is checked out. If I added an Interceptor for JMS transport, I can use the interceptor to deal with the fault. Is It right? If it is Ok, how is the interceptor added to the interceptors according to whether the jms transport is used or not? Are there any materials for interceptors, phases, and phase order? Thank you very much! Best regards, Liu
Re: How to implement the SOAP Fault for JMS Transport?
Hi, Willem Jiang Writes: Hi, I think you mean how to throw the fault from the JMS transport. Basically , if you throw the fault from a CXF interceptor, CXF's interceptors chain will take care of it and build the fault message and throw it out. If you want to check the Content type , you could write an interceptor and load it with your soap jms transport. How to load an interceptor with my soap jms transport? Is there any material for help? Thank you. But I think you could take the soap binding (SoapBindingFactory) as an example, and put this kind of checking as a work of soap jms binding. Just my 2 cents, Willem liucong wrote: Hi all, When I implement the SOAP Over JMS Specification, I don’t know how to implement SOAP fault for it. I use the org.apache.cxf.interceptor.Fault to record the Fault information. For example, I create a Fault instance for SOAP fault subcode contentTypeMismatch (http://www.w3.org/TR/2008/WD-soapjms-20080723/#binding-faults). If I check the fault the cxf-rt-transports-jms module, I don’t know how to deal with the fault which is checked out. If I added an Interceptor for JMS transport, I can use the interceptor to deal with the fault. Is It right? If it is Ok, how is the interceptor added to the interceptors according to whether the jms transport is used or not? Are there any materials for interceptors, phases, and phase order? Thank you very much! Best regards, Liu
a question when I run the JUnit test in eclipse.
Hi all, I have encountered a question when I run the JUnit test in eclipse. I have set up my eclipse workspace(eclipse 3.4.1) following the orders in http://cxf.apache.org/setting-up-eclipse.html. Than I run a JUnit test org.apache.cxf.systest.fault.IntFaultClientServerTest.java in cxf-systests. I encountered the Exception as follows: java.io.IOException: CreateProcess: D:\software\Java\jdk1.5.0_08\jre\bin\java -ea -Djavax.xml.ws.spi.Provider=org.apache.cxf.jaxws.spi.ProviderImpl -classpath E:\cxf\cxf-src\trunk\systests\target\test-classes;E:\cxf\cxf-src\trunk\systests\target\classes;C:\Documents and Settings\jason\.m2\repository\org\apache\abdera\abdera-core\0.4.0-incubating\abdera-core-0.4.0-incubating.jar;C:\Documents and Settings\jason\.m2\repository\org\apache\abdera\abdera-extensions-json\0.4.0-incubating\abdera-extensions-json-0.4.0-incubating.jar;C:\Documents and Settings\jason\.m2\repository\org\apache\abdera\abdera-extensions-main\0.4.0-incubating\abdera-extensions-main-0.4.0-incubating.jar;C:\Documents and Settings\jason\.m2\repository\org\apache\abdera\abdera-i18n\0.4.0-incubating\abdera-i18n-0.4.0-incubating.jar;C:\Documents and Settings\jason\.m2\repository\org\apache\abdera\abdera-parser\0.4.0-incubating\abdera-parser-0.4.0-incubating.jar;C:\Documents and Settings\jason\.m2\repository\org\apache\activemq\activeio-core\3.0.0-incubator\activeio-c� at java.lang.ProcessImpl.create(Native Method) at java.lang.ProcessImpl.init(ProcessImpl.java:81) at java.lang.ProcessImpl.start(ProcessImpl.java:30) at java.lang.ProcessBuilder.start(ProcessBuilder.java:451) at org.apache.cxf.testutil.common.ServerLauncher.launchServer(ServerLauncher.java:199) at org.apache.cxf.testutil.common.AbstractClientServerTestBase.launchServer(AbstractClientServerTestBase.java:61) at org.apache.cxf.systest.fault.IntFaultClientServerTest.startServers(IntFaultClientServerTest.java:39) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.junit.internal.runners.ClassRoadie.runBefores(ClassRoadie.java:49) at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:36) at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) What's wrong? Thank you very much. Best regards, Liu
How to implement the SOAP Fault for JMS Transport?
Hi all, When I implement the SOAP Over JMS Specification, I don’t know how to implement SOAP fault for it. I use the org.apache.cxf.interceptor.Fault to record the Fault information. For example, I create a Fault instance for SOAP fault subcode contentTypeMismatch (http://www.w3.org/TR/2008/WD-soapjms-20080723/#binding-faults). If I check the fault the cxf-rt-transports-jms module, I don’t know how to deal with the fault which is checked out. If I added an Interceptor for JMS transport, I can use the interceptor to deal with the fault. Is It right? If it is Ok, how is the interceptor added to the interceptors according to whether the jms transport is used or not? Are there any materials for interceptors, phases, and phase order? Thank you very much! Best regards, Liu
Re: GSoC projects for CXF
Hi, My cwiki.apache.org/CXF's User Name: liucon...@gmail.com, Full Name: jason. I have create a project for my project in gitHub. (http://github.com/liucong/jms4cxf2/tree/master). If it is needed, I'll do it following 3) One interesting thought: Best regards, Liu Willem Jiang Writes: Hi Dan, LiuCong created a wiki page[1] of his project working status on apache wiki , he doesn't have the write right of cwiki.apache.org/CXF, neither to me (njiang) :(. Could you grand the karma for us? So we can move the page into CXF. I just talked to LiuCong today on IRC , he will creates some JIRAs according his development plan shortly. [1] http://wiki.apache.org/general/soapjms4cxf Cheers, Willem Daniel Kulp wrote: Now that the implementation/code phase for the GSoC stuff has begun, it would definitely be good to start getting some additional communications flowing to see how progress is coming, resolve any roadblocks, answer questions, etc Thus, here are some ideas I thought of... 1) File some JIRA tasks on our JIRA: https://issues.apache.org/jira/browse/CXF It would be good to get a base jira created for your project and then start adding sub tasks to it.As things are implemented, the sub-projects can be resolved so we can see progress and such. Also provides a good checklist of what remains and such. (also, patches can be attached to the jiras so we can apply them) 2) I'd also like to start seeing regular status updates to the dev list just to keep tabs. Remember, part of your final evaluation with Google involves how involved you got with the community. Thus, speaking up on the dev list is a very good thing. 3) One interesting thought: I'd encourage you to get a github.com account and fork the CXF project (http://github.com/apache/cxf) and start pushing changes as you work in there. Thus, we can really see what you are doing, how it all works together, etc Additionally, if the patch starts getting complex, git does a MUCH better job of dealing with complex patches than subversion. Anyway, at this point, it's kind of important to get some information flowing.
my blog for gsoc, SOAP/JMS
Hi everyone, I have just started my first technical blog in google Blog (http://liucong07.blogspot.com/), and posted some articles about Google Summer of Code. My project is SOAP/JMS. I'll do some updates about my project in here, and post some questions or my understanding about CXF and Web Services. I am a new guy for open source and CXF. Any comments, advices and help are welcome :-) . Thank you for your attention. Any one who is interested in this project, please feel free to contact with me :-) Best regards, Liu
Re: A novice for CXF, woking on SOAP/JMS
Hi All, Any quest, suggest, advice or help will be welcome. Thank you very much. Liu Cong I am Liu Cong. My nick in irc is liucong.I'm so excited as I am accepted by CXF as gsoc student.I will work on SOAP/JMS project, which will update the SOAP/JMS support in CXF to be completely specification compliant. My mentor is Willem Jiang. Thanks for all you guys' help very much. Everyone please feels free to connect me.
GSoC Proposal:Implement JiBX databinding for CXF
Hi all, This is another proposal for cxf-jibx. I have published my proposal about cxf-jibx on http://wiki.apache.org/general/soc2009-cxf-jibx-proposal. The GSoC page is here:http://socghop.appspot.com/document/show/user/liucong/cxf_jibx_databinding Any comments and suggestions are welcome. Thanks in advance for your feedback. Thank You, Liu Cong
Re: GSoC Proposal:Implement the SOAP/JMS specification for CXF
Hi, I have started to consider other ideas. The project I attented is not public, so I can't give some links for it. Though I have read some code about axis2, axis, mule, r-osgi, cxf-dosgi, but I have not contributed some ideas to this project. I want to attend the GSoC, and get me involved into open source. GSoC will be a good start! Liu Willem Jiang 写道: Hi, Since there are more than 2 student choiced CXF-SOAP-JMS, do you consider to choice other ideas of CXF project ? Can you give us some reference of your projects or some link can show your coding ability? Willem jason wrote: Hi all, I want to take part in the GSoC. Aftter looking into the suggestions by Daniel Kulp, I have modified my proposal and published this proposal on GSoC. I have published my proposal about cxf-soapjms on http://wiki.apache.org/general/soc2009-soapjms-proposal. The GSoC page is here: http://socghop.appspot.com/document/show/user/liucong/cxf_soapjms Any comments and suggestions are welcome. Thanks in advance for your feedback. Thank You, Liu Cong