Radu, I observed a strange behaviour.
I created two jar files. 1) getEquityDetailRequest.jar 2) getEquityDetailResponse.jar I use the first jar file for creating a request message, which works fine. But when I try to parse the response message using classes from the second jar file, I am getting ClassCastException. I tried with following two options. 1) XmlObject o=XmlBeans.getContextTypeLoader().parse(responseMsg,xml.response.GetEquityAccountDetailDocument.type,opts); 2) XmlObject o=xml.response.GetEquityAccountDetailDocument.Factory.parse(responseMsg,opts); When I pass a response message to parse method, I expect it to return xml.response.GetEquityAccountDetailDocument but it is creating xml.request.impl.GetEquityAccountDetailDocumentImpl object. Is this a bug ? or am I missing something ? Thanks, Gopi Radu Preotiuc-Pietro wrote: > > You should break it up of course, in fact you should use the standard > SOAP Schema for the SOAP part (you can find it at the URI pointed to by > the SOAP namespace). That part contains an <any> to represent the > content of the Body element. The actual element inside the Body in the > instance will be bound by XMLBeans to the correct type based on the > _qualified_ name of the element. > > Radu > > -----Original Message----- > From: gopi.rcr [mailto:[EMAIL PROTECTED] > Sent: Monday, November 27, 2006 3:58 PM > To: user@xmlbeans.apache.org > Subject: RE: blank namespace > > > Radu, > Thanks for your suggestion. > I am just curious to know how XMLBeans are used to generate and parse > SOAP messages. I guess in most of the cases only the Soap body is going > to differ for all the messages. Is it advisable to break the schema into > Soap template and soap body ? or Should schemas be generated for every > soap message ? > > Thanks, > Gopi > > > > Radu Preotiuc-Pietro wrote: >> >> Does the answer from the server arrive in a SOAP message or as a >> standalone XML document? If the latter, then >> XmlOptions.setLoadReplaceDocumentElement(new >> QName("http://service..com/resp/", "getEquityAccountDetail")) should >> do the trick by changing the name of _only_ the root element, so at >> that point the message will match the Schema and XMLBeans will be able > >> to access all the data in the message with the generated getters. >> >> On the way out (to the server) it's more complicated, I don't think >> that there is one option that will magically "fix" the name of just >> the right element (given that it's inside a SOAP payload). The only >> way I know to accomplish that is use an XmlCursor to navigate to the >> "getEquityAccountDetail" element and then call cursor.setName(new >> QName("http://service..com/req/", >> "getEquityAccountDetail")) >> right before you call serialize your message to XML. >> >> Hope this helps, >> Radu >> >> -----Original Message----- >> From: gopi.rcr [mailto:[EMAIL PROTECTED] >> Sent: Monday, November 27, 2006 2:19 PM >> To: user@xmlbeans.apache.org >> Subject: RE: blank namespace >> >> >> Thanks David for your quick response. >> Even if I introduce one more header, I guess I am still going to have >> my basic problem of resolving name space collisions when I try to >> compile schemas into java files since <soap-env:header>, >> <soap-env:body>, <getEquityAcountDetails> etc tags will be present in >> all my request and response messages. >> >> Thanks, >> Gopi >> >> >> >> Webber, David (NIH/OD) [C] wrote: >>> >>> Gopi, >>> >>> Yes - you need to modify your schema - make two choices for the >>> elements >>> - and add a parent element above if necessary - so you can have two >>> forms of the child elements - depending on the type of message you >>> are >> >>> sending. >>> >>> This is what I was trying to tell you - add a type Hdr to YOUR MSG >>> perhaps is one choice - not the SOAP HDR!!! >>> >>> Then inside your own header you can have two or more forms of the >>> elements you need. >>> >>> DW >>> >>> -----Original Message----- >>> From: gopi.rcr [mailto:[EMAIL PROTECTED] >>> Sent: Monday, November 27, 2006 1:51 PM >>> To: user@xmlbeans.apache.org >>> Subject: RE: blank namespace >>> >>> >>> Hi David, >>> I already have header info in my message. I didnt post the complete >>> message. >>> My complete msg looks like this: >>> >>> <soap-env:header> >>> <action>getEquityAccountDetail</action> >>> </soap-env:header> >>> <soap-env-body> >>> <getEquityAccountDetails> >>> ----- >>> request information. >>> ---- >>> </getEquityAccountDetails> >>> </soap-env-body> >>> >>> This is what our server expects for a request message. Header as such > >>> doesnt contain any useful information related to query. The response > >>> msg also has a similar structure only difference being the contents >>> of >> >>> <getEquityAccountDetails> are different. >>> >>> Response msg would look like this: >>> >>> <soap-env:header> >>> <action>getEquityAccountDetail</action> >>> </soap-env:header> >>> <soap-env-body> >>> <getEquityAccountDetails> >>> ----- >>> response msg (XML format) >>> ---- >>> </getEquityAccountDetails> >>> </soap-env-body> >>> >>> >>> >>> I am open to modify my schema if it is going to solve the issue. >>> >>> Thanks, >>> Gopi >>> >>> >>> >>> >>> >>> Webber, David (NIH/OD) [C] wrote: >>>> >>>> Why don't you re-design your schema so its not so badly overloaded? >>>> >>>> Seems simple to add a few parent elements to resolve all this - such >>> as: >>>> >>>> <Msg> >>>> <Query> >>>> <!- - Msg goes here --> >>>> </Query> >>>> <Response> >>>> <!- - Msg goes here --> >>>> </Response> >>>> </Msg> >>>> >>>> Or if you don't like that - what about >>>> >>>> <Msg> >>>> <Hdr> my header stuff goes here for each Msg type </Hdr> >>>> <Body> >>>> <!- - Msg goes here --> >>>> </Body> >>>> </Msg> >>>> >>>> Seems like your original design for the xsd is what is giving you >>>> all >> >>>> the problems... >>>> >>>> DW >>>> >>>> -----Original Message----- >>>> From: gopi.rcr [mailto:[EMAIL PROTECTED] >>>> Sent: Wednesday, November 22, 2006 5:51 PM >>>> To: user@xmlbeans.apache.org >>>> Subject: RE: blank namespace >>>> >>>> >>>> Radu, >>>> Thanks for the detailed explanation. >>>> >>>> Now I understand why it is behaving the way it is behaving. >>>> >>>> Let me explain the problem that I am facing. The request and >>>> response >> >>>> XML message formats for our server dont have any namespaces for the >>>> XML elements. ie. they belong to a default namespace. >>>> >>>> eg: <GetEquityAccountDetail> is used for both request as well as >>>> response however the contents of this element are different for both > >>>> request >>> and >>>> response. >>>> >>>> If I run these two schemas through scomp tool, there will be >>>> namespace collisions. So, to get around this problem, I associated >>>> "req" and "resp" >>>> prefixes for request and response messages respectively. Now, I have >>> two >>>> issues. >>>> >>>> 1) When I generate a request message, it puts a "req" prefix which >>>> is >> >>>> perfect. BUt our server doesnt like the request message if there is >>>> a >> >>>> namespace prefix. So, I use saveImplicitNameSpaces to get rid of >> "req" >>>> prefix but it puts blank namespace references to other elements. >>> Though >>>> the >>>> message is semantically correct, our server fails to validate. Looks > >>>> like our server uses some kind of string matching program( not sure >>>> ) >> >>>> to validate the request message. Please let me know if there is a >>>> better way of solving this. >>>> >>>> <req:GetEquityAccountDetail xmlns:req="http://....."> >>>> <acccountNumber> </acccountNumber> >>>> <productCode> </productCode> >>>> <elementList> </elementList> >>>> </req:GetEquityAccoungDetail> >>>> >>>> >>>> 2) I hardcode the request message and get the following response >>>> from >> >>>> the server. >>>> >>>> <getEquityAccountDetail> >>>> <serviceName>ElpsService</serviceName> >>>> <action>getEquityAccountDetail</action> >>>> <processingTime>117</processingTime> >>>> <info> >>>> <accountNumber>65165104446500001</accountNumber> >>>> <productCode>LCA</productCode> >>>> <lineOfCredit> </lineofCredit> >>>> </info> >>>> </getEquityAccountDetail> >>>> >>>> >>>> Now, my schema has "resp" name prefix for the response message. So, >>>> parsing would obviously fail since the response I got from the >>>> server >> >>>> doesnt have any namespace. So, I use the following options. >>>> >>>> HashMap m=new HashMap(); >>>> m.put("","http://service.wellsfargo.com/resp/"); >>>> opts.setLoadSubstituteNamespaces(m); >>>> >>>> When I try to print the values for ServiceName, ProcessingTime and >>> Info, >>>> it >>>> is printing null for all these values. >>>> >>>> >>>> xml.response.GetEquityAccountDetailDocument.GetEquityAccountDetail >>>> >>>> gead=geadRespDoc.getGetEquityAccountDetail(); >>>> System.out.println(" Service name in body >>>> "+gead.getServiceName()); >>>> System.out.println(" processing time in body >>>> "+gead.getProcessingTime()) >>>> >>>> Could you please tell me what I am missing? >>>> Please let me know if there is a bettwer way of handling this. >>>> >>>> >>>> >>>> Thanks in advance, >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> Radu Preotiuc-Pietro wrote: >>>>> >>>>> Gopi and David, >>>>> >>>>> This is not about namespace declarations, this is about the names >>>>> of >> >>>>> elements in an XML document. In namespace-aware Schema processors >>>> (like >>>>> XMLBeans and mostly everyhing out there, except for some legacy >>> apps), >>>>> each element or attribute has a name (or QName, qualified name) >>>>> that >>>> is >>>>> composed of a namespace uri (which can be empty) and a local name. >>>>> >>>>> Now, in XMLSchema too, each time elements or attributes are >>>>> declared, >>>> a >>>>> name is also part of the declaration. The names declared in the >>>>> XMLSchema and the names present in the instance XML file have to >>> match >>>>> in order for the document to be valid, and this is what XMLBeans >>> tries >>>>> to ensure. >>>>> >>>>> Now in gopi's example, that Schema declared an element with the >>>>> name >> >>>>> (local [EMAIL PROTECTED] uri) >>>>> >>>>> [EMAIL PROTECTED]://service..com/req/ (local >>>>> name=getEquityAccountDetail, >>>>> namespace-uri=http://service..com/req/) >>>>> >>>>> This element in turn is supposed to contain the elements >>>>> >>>>> accountNumber@ >>>>> productCode@ >>>>> elementList@ >>>>> >>>>> This is why the original document looks the way it does. It is >>>> correct. >>>>> By setting setSaveImplicitNamespaces(m), you tell XMLBeans that the > >>>>> prefix "" (the default prefix) is already associated to the >>>>> "http://service..com/req/", so then XMLBeans, correctly again, >>> doesn't >>>>> redeclare it, but then when it comes to the "accountNumber", this >>>>> element has to have an empty namespace-uri and the only way to >>> achieve >>>>> this is to use an xmlns="" declaration. This is correct and fully >>>>> expected. >>>>> >>>>> All I am trying to say is that we have to look at this is terms of >>>>> changing names for elements, not in terms of manipulating prefix >>>>> declarations. On the loading side, we have >>>>> .setLoadSubstituteNamespaces() which replaces a namespace uri with >>>>> another for each name in the document. But this, again, does not >>>>> have the ability to replace any namespace in the incoming document >>>>> with something, you have to tell it in advance what namespaces to >> expect. >>>> On >>>>> the saving side, there is no option like that, I guess users have >>>> found >>>>> it useful only for loading. >>>>> >>>>> I really want to do my best to help here, what part of what I wrote > >>>>> din't make sense? >>>>> >>>>> Radu >>>>> >>>>> -----Original Message----- >>>>> From: Webber, David (NIH/OD) [C] [mailto:[EMAIL PROTECTED] >>>>> Sent: Wednesday, November 22, 2006 7:03 AM >>>>> To: user@xmlbeans.apache.org >>>>> Subject: RE: blank namespace >>>>> >>>>> Yeah - this is related to what I've been complaining about for a >>> week! >>>>> >>>>> Handling of default namespace is the reverse of what you would >>> expect. >>>>> >>>>> What you try is putting a default namespace declaration on your >>>>> root >> >>>>> element - <req:getEquityAccountDetail >>>> xmlns="http://banktrans/default/"> >>>>> >>>>> Which will at least prevent it having to generate ones for you >>>>> inside your XML. >>>>> >>>>> There should however be some way to tell XMLBeans to not require a >>>>> default namespace declaration - but so far I've not been able to >>> track >>>>> down how... >>>>> >>>>> DW >>>>> >>>>> -----Original Message----- >>>>> From: gopi.rcr [mailto:[EMAIL PROTECTED] >>>>> Sent: Tuesday, November 21, 2006 7:03 PM >>>>> To: user@xmlbeans.apache.org >>>>> Subject: Re: blank namespace >>>>> >>>>> >>>>> Forgot to include, >>>>> >>>>> My schema file looks somthing like this. >>>>> >>>>> <xs:schema targetNamespace="http://service..com/req/" >>>>> xmlns:xs="http://www.w3.org/2001/XMLSchema"> >>>>> >>>>> <xs:import schemaLocation="Elps_GetEquityData_Request1.xsd"/> >>>>> <xs:element name="getEquityAccountDetail"> >>>>> <xs:complexType> >>>>> <xs:sequence> >>>>> <xs:element ref="accountNumber"/> >>>>> <xs:element ref="productCode"/> >>>>> <xs:element ref="elementList"/> >>>>> </xs:sequence> >>>>> </xs:complexType> >>>>> </xs:element> >>>>> </xs:schema> >>>>> >>>>> The elements accountNumber, productCode and elementList dont have a > >>>>> namespace. >>>>> >>>>> Thanks, >>>>> >>>>> >>>>> >>>>> gopi.rcr wrote: >>>>>> >>>>>> Hi, >>>>>> >>>>>> I have an XMLBeans based program for generating XML output. XML >>>> output >>>>> >>>>>> looks as below: >>>>>> >>>>>> <req:getEquityAccountDetail> >>>>>> <accountNumber> >>>>>> <bank>651</bank> >>>>>> <branch>651</branch> >>>>>> <customer>0444650</customer> >>>>>> <loan>0001</loan> >>>>>> </accountNumber> >>>>>> <productCode>LCA</productCode> >>>>>> ----------- >>>>>> >>>>>> When I modify my code to filter out req namespace prefix by doing >>> the >>>>>> following. >>>>>> >>>>>> XmlOptions op = new XmlOptions(); >>>>>> HashMap m=new HashMap(); >>>>>> m.put("","http://service.wellsfargo.com/req/"); //namespace uri >>>>>> for >>>>> req >>>>>> opts.setSaveImplicitNamespaces(m); >>>>>> >>>>>> ----------------------------------------------------------- >>>>>> >>>>>> I am getting output as follows, which has unwanted blank namespace > >>>>>> references for accountNumber and ProductCode. What should I do to >>> get >>>>> rid >>>>>> of these namespace references ? Why is it putting the blank >>> namespace >>>>>> references ? >>>>>> >>>>>> <getEquityAccountDetail> >>>>>> <accountNumber xmlns=""> >>>>>> <bank>651</bank> >>>>>> <branch>651</branch> >>>>>> <customer>0444650</customer> >>>>>> <loan>0001</loan> >>>>>> </accountNumber> >>>>>> <productCode xmlns="">LCA</productCode> >>>>>> >>>>>> >>>>>> You help is highly appreicated. >>>>>> >>>>>> Thanks >>>>>> >>>>>> >>>>> >>>>> -- >>>>> View this message in context: >>>>> http://www.nabble.com/blank-namespace-tf2681769.html#a7482861 >>>>> Sent from the Xml Beans - User mailing list archive at Nabble.com. >>>>> >>>>> >>>>> ------------------------------------------------------------------- >>>>> - >>>>> - To unsubscribe, e-mail: [EMAIL PROTECTED] >>>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>>> >>>>> ------------------------------------------------------------------- >>>>> - >>>>> - To unsubscribe, e-mail: [EMAIL PROTECTED] >>>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>>> >>>>> >>>> >>> _____________________________________________________________________ >>> _ >>> _ >>>>> Notice: This email message, together with any attachments, may >>>> contain >>>>> information of BEA Systems, Inc., its subsidiaries and >>>> affiliated >>>>> entities, that may be confidential, proprietary, copyrighted >>>> and/or >>>>> legally privileged, and is intended solely for the use of the >>>> individual >>>>> or entity named in this message. If you are not the intended >>>> recipient, >>>>> and have received this message in error, please immediately return >>>> this >>>>> by email and then delete it. >>>>> >>>>> ------------------------------------------------------------------- >>>>> - >>>>> - To unsubscribe, e-mail: [EMAIL PROTECTED] >>>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>>> >>>>> >>>>> >>>> >>>> -- >>>> View this message in context: >>>> http://www.nabble.com/blank-namespace-tf2681769.html#a7497571 >>>> Sent from the Xml Beans - User mailing list archive at Nabble.com. >>>> >>>> >>>> -------------------------------------------------------------------- >>>> - To unsubscribe, e-mail: [EMAIL PROTECTED] >>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>> >>>> -------------------------------------------------------------------- >>>> - To unsubscribe, e-mail: [EMAIL PROTECTED] >>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>> >>>> >>>> >>> >>> -- >>> View this message in context: >>> http://www.nabble.com/blank-namespace-tf2681769.html#a7565484 >>> Sent from the Xml Beans - User mailing list archive at Nabble.com. >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> For additional commands, e-mail: [EMAIL PROTECTED] >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> For additional commands, e-mail: [EMAIL PROTECTED] >>> >>> >>> >> >> -- >> View this message in context: >> http://www.nabble.com/blank-namespace-tf2681769.html#a7569291 >> Sent from the Xml Beans - User mailing list archive at Nabble.com. >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> ______________________________________________________________________ >> _ >> Notice: This email message, together with any attachments, may >> contain information of BEA Systems, Inc., its subsidiaries and >> affiliated entities, that may be confidential, proprietary, >> copyrighted and/or legally privileged, and is intended solely for the > >> use of the individual or entity named in this message. If you are not >> the intended recipient, and have received this message in error, >> please immediately return this by email and then delete it. >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> >> > > -- > View this message in context: > http://www.nabble.com/blank-namespace-tf2681769.html#a7570680 > Sent from the Xml Beans - User mailing list archive at Nabble.com. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > _______________________________________________________________________ > Notice: This email message, together with any attachments, may contain > information of BEA Systems, Inc., its subsidiaries and affiliated > entities, that may be confidential, proprietary, copyrighted and/or > legally privileged, and is intended solely for the use of the individual > or entity named in this message. If you are not the intended recipient, > and have received this message in error, please immediately return this > by email and then delete it. > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > -- View this message in context: http://www.nabble.com/blank-namespace-tf2681769.html#a7572406 Sent from the Xml Beans - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]