Hi Nick,

See my comments inline.

On Tue, Sep 23, 2008 at 4:20 PM, Nick Steel <[EMAIL PROTECTED]
> wrote:

>
> Just to confuse matters further I realised the reason I could get a
> response
> using your code is that it was using the "application/json/badgerfish"
> MESSAGE_TYPE when in fact in my axis2.xml config my
> JSONBadgerfishMessageFormatter/JSONBadgerfishOMBuilder are defined as using
> "text/javascript".  So in fact with your code I was sending plain XML, not
> JSON.  When I change it to "text/javascript" I get an exception and no
> output:
> Caused by: java.lang.IllegalArgumentException: The MessageContext does not
> have an associated SOAPFault.


This happens at the client side when a JSON response is a fault. I
undentified this issue a couple of days ago. We are in the progree of
discussing this issue on the Axis2-dev list [1]. We should have a sollution
for this soon.

Thanks,
Keith.


[1] http://markmail.org/message/mzlbfvjujfeyeuzd

>
>
> My client code is:
> ServiceClient client = new
>
> ServiceClient(ConfigurationContextFactory.createConfigurationContextFromFileSystem(null,"axis2.xml"),
> null);
> Options options = client.getOptions();
>
> options.setProperty(Constants.Configuration.MESSAGE_TYPE,"text/javascript");
> client.setTargetEPR(new
> EndpointReference("
> http://mooshup.com/services/samples/RESTSample/getWeather";));
> try {
>         OMElement payload =
> AXIOMUtil.stringToOM("<getWeather><city>col</city></getWeather>");
>         OMElement omElement = client.sendReceive(payload);
>        omElement.serialize(System.out);
> } catch (XMLStreamException e) {
>        e.printStackTrace();
> }
>
> So I am still very stuck!
> Nick
>
>
> Nick Steel wrote:
> >
> > And yes when I use your code I am able to receive the response from the
> > weather service without problem. The only difference I can see between
> the
> > response from the weather service and my service is that I have ns:return
> > and you have return, surely that's not the problem?! Otherwise they look
> > pretty much the same.
> >
> > Nick
> >
> >
> > Nick Steel wrote:
> >>
> >> Sorry to bring this up again after so long but I've had some time now to
> >> play with this again and I'm still having problems.  I am able to form a
> >> sensible looking JSON request containing my namespace and without. In
> >> EITHER case the response from the server comes back with the namespace
> >> included:
> >> {"ns:getMostActiveArtistResponse":{"@xmlns":{"ns":"http:\/\/
> NicksGigs.nsteel.qis.Nickcom.com"},"ns:return":{"$":"The
> >> Cure"}}}
> >>
> >> When I then do response.getChildElements(); I get the error
> "forceExpand:
> >> expected element namespace getMostActiveArtistResponse, found " which
> >> then throws the exception "Element namespace from data source is
> >> http://NicksGigs.nsteel.qis.Nickcom.com, not the expected ".
> >>
> >> All I'm doing on my Java client is:
> >> OMFactory fac = OMAbstractFactory.getOMFactory();
> >> OMNamespace ns =
> >> fac.createOMNamespace("http://NicksGigs.nsteel.qis.Nickcom.com","ns2";);
> >> OMElement rootElement = fac.createOMElement("getMostActiveArtist", ns);
> >> OMElement response = client.sendReceive(rootElement);
> >> Iterator<OMElement> itr = response.getChildElements();
> >>
> >> Which sends the request:
> >> {"ns2:getMostActiveArtist":{"@xmlns":{"ns2":"http:\/\/
> NicksGigs.nsteel.qis.Nickcom.com"}}}
> >>
> >> When tracing through it seems that the badgerfish receiver doesn't have
> a
> >> correct record of the namespace, should I be setting it somewhere before
> >> I send the request?
> >>
> >> Thanks,
> >> Nick
> >>
> >>
> >> Keithgchapman wrote:
> >>>
> >>> Hi Nick,
> >>>
> >>> I gave this a try and it works for me. In my example scenario I access
> >>> a service which is deployed on a WSO2 Mashup Server [1] on mooshup.com
> >>> (The WSO2 Mashup Server runs on top of Axis2). the service I access is
> >>> the RESTSample [2]. My client is as follows,
> >>>
> >>>         ServiceClient serviceClient = new
> >>>
> ServiceClient(ConfigurationContextFactory.createConfigurationContextFromFileSystem(null,
> >>> "/opt/repo/axis2_default.xml"), null);
> >>>         Options options = new Options();
> >>>         options.setTo(new
> >>> EndpointReference("
> http://mooshup.com/services/samples/RESTSample/getWeather";));
> >>>         serviceClient.setOptions(options);
> >>>         OMElement payload =
> >>> AXIOMUtil.stringToOM("<getWeather><city>col</city></getWeather>");
> >>>
> >>>
> options.setProperty(Constants.Configuration.MESSAGE_TYPE,"application/json/badgerfish");
> >>>         OMElement omElement = serviceClient.sendReceive(payload);
> >>>         omElement.serialize(System.out);
> >>>
> >>> The TCPMon traces of the messages are,
> >>> Input
> >>>
> >>> POST /services/samples/RESTSample/getWeather HTTP/1.1
> >>>
> >>> Content-Type: application/json/badgerfish; charset=UTF-8
> >>>
> >>> User-Agent: Axis2
> >>>
> >>> Host: 127.0.0.1
> >>>
> >>> Transfer-Encoding: chunked
> >>>
> >>>
> >>>
> >>> 23
> >>>
> >>> {"getWeather":{"city":{"$":"col"}}}
> >>>
> >>> 0
> >>>
> >>>
> >>> Output
> >>>
> >>> HTTP/1.1 200 OK
> >>>
> >>> Server: Apache-Coyote/1.1
> >>>
> >>> Content-Type: application/json/badgerfish;charset=UTF-8
> >>>
> >>> Transfer-Encoding: chunked
> >>>
> >>> Date: Mon, 01 Sep 2008 14:40:35 GMT
> >>>
> >>>
> >>>
> >>> 73
> >>>
> >>> {"ws:getWeatherResponse":{"@xmlns":{"ws":"http:\/\/
> services.mashup.wso2.org\/RESTSample?xsd"},"return":{"$":"10"}}}
> >>>
> >>> 0
> >>>
> >>>
> >>> BTW the JavaScript module on the WSO2 Mashup Server [1] up on
> >>> mooshup.com is the one shipped with the 1.4 release of Axis2. And as
> >>> you see it works fine. Can you give this a try please.
> >>>
> >>> Thanks,
> >>> Keith.
> >>>
> >>> [1] http://wso2.org/projects/mashup
> >>> [2] http://mooshup.com/mashup.jsp?author=samples&mashup=RESTSample
> >>>
> >>> On Fri, Aug 29, 2008 at 9:13 PM, Nick Steel
> >>> <[EMAIL PROTECTED]> wrote:
> >>>>
> >>>> Following my unresolved problem with REST last week I tried using JSON
> >>>> and
> >>>> have had more problems!  I followed the guide at
> >>>> http://wso2.org/library/768
> >>>> and the sample yahoojsonsearch in the axis2 samples.  I set the
> message
> >>>> builders and formatters in the axis2.xml as instructed.  I then
> firstly
> >>>> tried to use my existing ADB bindings with the ContentType property
> set
> >>>> to
> >>>> "application/json" and when they failed to work I tried constructing
> >>>> the
> >>>> OMElement myself as in the sample but with no success.  Then I tried a
> >>>> mixture of the two which is the only way I can get a response!
> >>>>
> >>>> client = new ServiceClient(super.getConfigContext(),
> >>>> Options options = client.getOptions();
> >>>> options.setProperty(Constants.Configuration.MESSAGE_TYPE,
> >>>> "application/json");
> >>>> client.setTargetEPR(new EndpointReference(endpointUrl));
> >>>>
> >>>> GetGigsIn getGigsInObj = new GetGigsIn();
> >>>> getGigsInObj.setParam0(city);
> >>>> OMElement rootElement = getGigsInObj.getOMElement(GetGigsIn.MY_QNAME,
> >>>> fac);
> >>>> OMElement response = client.sendReceive(rootElement);
> >>>>
> >>>> However it throws an exception after during the last line and TCPmon
> >>>> shows
> >>>> the request and response as:
> >>>> POST /NicksGigs-war-Axis2/services/GigListingsService HTTP/1.1
> >>>> Content-Type: application/json; charset=UTF-8
> >>>> User-Agent: Axis2
> >>>> Host: 10.4.39.241:8089
> >>>> Transfer-Encoding: chunked
> >>>>
> >>>> 69
> >>>> {"ns2:getGigsIn":{"@xmlns":{"ns2":"http:\/\/
> NicksGigs.nsteel.qis.Nickcom.com"},"param0":{"$":"London"}}}
> >>>> 0
> >>>> ------------------
> >>>> HTTP/1.1 500 Internal Server Error
> >>>> Server: Apache-Coyote/1.1
> >>>> Content-Type: application/json;charset=UTF-8
> >>>> Transfer-Encoding: chunked
> >>>> Date: Fri, 29 Aug 2008 12:22:43 GMT
> >>>> Connection: close
> >>>>
> >>>> 10c
> >>>> {"Fault":{"$":"<soapenv:Fault
> >>>> xmlns:soapenv=\"http:\/\/schemas.xmlsoap.org
> \/soap\/envelope\/\"><faultcode>soapenv:Server<\/faultcode><faultstring>namespace
> >>>> mismatch require http:\/\/NicksGigs.nsteel.qis.Nickcom.com found
> >>>> <\/faultstring><detail \/><\/soapenv:Fault>"}}
> >>>> 0
> >>>>
> >>>>
> >>>> After tracing through the serverside code I found that the empty
> >>>> namespace
> >>>> object is created in JSONOMBuilder at Line 52:
> >>>> OMNamespace ns = new OMNamespaceImpl("", "")
> >>>>
> >>>> And then only used to create a new OMSourcedElementImpl object at line
> >>>> 111:
> >>>> return new OMSourcedElementImpl(localName, ns, factory,
> >>>> jsonDataSource);
> >>>>
> >>>> After which point I dont know what happens to it.  If I then set an
> >>>> expression in Eclipse while debugging to manually set this namespace
> >>>> object
> >>>> [ns = new OMNamespaceImpl("http://NicksGigs.nsteel.qis.Nickcom.com";,
> >>>> "");]
> >>>> then the server returns a full response but something on the client
> >>>> side
> >>>> throws this exception:
> >>>> Caused by: org.apache.axiom.om.OMException:
> >>>> javax.xml.stream.XMLStreamException: Invalid prefix ns on element
> >>>> ns:return
> >>>>        at
> >>>>
> org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:249)
> >>>>        at
> >>>>
> org.apache.axiom.om.impl.llom.OMElementImpl.buildNext(OMElementImpl.java:633)
> >>>>        at
> >>>>
> org.apache.axiom.om.impl.llom.OMSourcedElementImpl.buildNext(OMSourcedElementImpl.java:847)
> >>>>        at
> >>>>
> org.apache.axiom.om.impl.llom.OMElementImpl.getFirstOMChild(OMElementImpl.java:650)
> >>>>        at
> >>>>
> org.apache.axiom.om.impl.llom.OMSourcedElementImpl.getFirstOMChild(OMSourcedElementImpl.java:839)
> >>>>        at
> >>>>
> org.apache.axiom.om.impl.llom.OMElementImpl.getFirstElement(OMElementImpl.java:956)
> >>>>        at
> >>>>
> org.apache.axiom.om.impl.llom.OMSourcedElementImpl.getFirstElement(OMSourcedElementImpl.java:410)
> >>>>        at
> >>>>
> org.apache.axiom.om.impl.llom.OMElementImpl.getChildElements(OMElementImpl.java:332)
> >>>>        at
> >>>>
> org.apache.axiom.om.impl.llom.OMSourcedElementImpl.getChildElements(OMSourcedElementImpl.java:267)
> >>>>        at
> >>>>
> com.qualcomm.qis.nsteel.NicksGigs.ManualJson.getGigsIn(ManualJson.java:69)
> >>>>        ... 32 more
> >>>>
> >>>> Line 69 in ManualJson is:
> >>>> Iterator<OMElement> itr = response.getChildElements();
> >>>> Which seems to be throwing an error because the response has not been
> >>>> properly parsed (response.done=false).
> >>>>
> >>>> What am i doing wrong here with the namespaces to get both of these
> >>>> problems?
> >>>> --
> >>>> View this message in context:
> >>>> http://www.nabble.com/Axis2-Java-and-JSON-tp19222439p19222439.html
> >>>> Sent from the Axis - User mailing list archive at Nabble.com.
> >>>>
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>>> For additional commands, e-mail: [EMAIL PROTECTED]
> >>>>
> >>>>
> >>>
> >>>
> >>>
> >>> --
> >>> Keith Chapman
> >>> Senior Software Engineer
> >>> WSO2 Inc.
> >>> Oxygenating the Web Service Platform.
> >>> http://wso2.org/
> >>>
> >>> blog: http://www.keith-chapman.org
> >>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>> For additional commands, e-mail: [EMAIL PROTECTED]
> >>>
> >>>
> >>>
> >>
> >>
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/Axis2-Java-and-JSON-tp19222439p19625234.html
> Sent from the Axis - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


-- 
Keith Chapman
Senior Software Engineer
WSO2 Inc.
Oxygenating the Web Service Platform.
http://wso2.org/

blog: http://www.keith-chapman.org

Reply via email to