Thanks again Dan, your explanation makes much better sense now. The reason why I'm trying to keep width and height wrapped into a BoxType element is so that the operation method only needs to receive one object, whether as a DOM Element or an actual BoxType javabean. Then, any property changes to the BoxType element won't require changes to the operation methods. I would only need to regenerate the XmlBeans from the xsd's, and if needed, update the operation method logic.
This design will then easily integrate with our existing model APIs, and I can pass around whole "objects" instead of "sets of properties". -Vinh -----Original Message----- From: Daniel Jemiolo [mailto:[EMAIL PROTECTED] Sent: Tuesday, October 31, 2006 11:14 AM To: [email protected] Subject: RE: non-anonymous complex type It all has to do with how you want your XML formatted. As you saw before, using type="box:BoxType" does actually work, but you don't get the <BoxType/> wrapper element under <BoxOperation/>. You're defining <BoxOperation/> to be a type that is just a sequence of elements (width and height), and since we interpret each element under the operation element to be a parameter, you need two Java parameters (int width, int height). If you want that extra wrapper element in there (<BoxType/>), then <BoxOperation/> has to be a sequence of elements. In this case, BoxType is the only element in the sequence. I assume that the reason you want the <BoxType/> wrapper is the possibility of adding other parameters that are unrelated to BoxType in the future. I believe Muse's interpretation of XSD is correct in this case, and it's really just a matter of whether you want the box data right under <BoxOperation/> or separated out under a wrapper. Dan "Vinh Nguyen \(vinguye2\)" <[EMAIL PROTECTED]> wrote on 10/31/2006 02:06:40 PM: > Thanks Dan, > I think I was defining the xml schema incorrectly in the wsdl. > > So if I wanted to pass a single string parameter, I can define the > schema as: > <xsd:element name="BoxOperation" type="xsd:string"/> > > But, if I wanted to pass a single complex-type parameter, I cannot > define the schema as: > <xsd:element name="BoxOperation" type="box:BoxType"/> > > Instead, I must define it as: > <xsd:element name="BoxOperation"> > <xsd:complexType> > <xsd:sequence> > <xsd:element name="Box" type="box:BoxType"/> > </xsd:sequence> > </xsd:complexType> > </xsd:element> > > Then, my java code can look like: > Element boxOperation(Element boxXML); > > Is this correct? Is there a reason why the single line schema form > above won't work when trying to pass a single complex-type parameter? > -Vinh > > > -----Original Message----- > From: Daniel Jemiolo [mailto:[EMAIL PROTECTED] > Sent: Tuesday, October 31, 2006 7:27 AM > To: [email protected] > Subject: Re: non-anonymous complex type > > It's expecting "width" and "height" as the two parameters. If you want > there to be one paramter ("width" and "height" wrapped in a "BoxType" > element"), try this: > > <xsd:element name="BoxOperation"> > <xsd:complexType> > <xsd:sequence> > <xsd:element name="Box" type="box:BoxType"/> > </xsd:sequence> > </xsd:complexType> > </xsd:element> > > What you have now requires that the SOAP look like this: > > <BoxOperation> > <width>100</width> > <height>300</height> > </BoxOperation> > > and the Java like this: > > Box boxOperation(int width, int height); // return Box or > Element > > > What you want is this (I think): > > <BoxOperation> > <Box> > <width>100</width> > <height>300</height> > </Box> > </BoxOperation> > > > which translates to the XSD above and this Java: > > Box boxOperation(Box box); > > (or: Element boxOperation(Element boxXML); > > > If you make a Serializer for Box objects, you can use Box in your > methods instead of DOM Elements. See the last section of this page: > > > http://ws.apache.org/muse/docs/2.0.0/manual/architecture/deployment-de > sc > riptor.html#serializer > > > > > > "Vinh Nguyen \(vinguye2\)" <[EMAIL PROTECTED]> wrote on 10/31/2006 > 02:41:18 AM: > > > Hi all, > > I'm trying to define a non-anonymous, custom complex type so that I > > can > pass > > it as a single request parameter. But, I am running into some > problems. > My > > custom type is defined as: > > <xsd:schema > > elementFormDefault="qualified" > > targetNamespace="http://cisco.com/muse/demo/cap/box"> > > <xsd:complexType name="BoxType"> > > <xsd:sequence> > > <xsd:element name="width" type="xsd:integer"/> > > <xsd:element name="height" type="xsd:integer"/> > > </xsd:sequence> > > </xsd:complexType> > > <xsd:element name="BoxOperation" type="box:BoxType" /> > > <xsd:element name="BoxOperationResponse" > type="box:BoxType" > /> > > </xsd:schema> > > > > The java code for my operation is: > > public Element boxOperation(Element param1) throws Exception > > { > > BoxOperationDocument doc = > BoxOperationDocument.Factory.parse(param1. > > getParentNode()); > > BoxType type = doc.getBoxOperation(); > > type.setWidth(type.getWidth().add(BigInteger.valueOf(100))); > > type.setHeight(type.getHeight().add(BigInteger.valueOf(100))); > > return XmlUtils.getFirstElement(doc.getDomNode()); > > } > > > > The client code is: > > public String testBoxOperation() > > throws SoapFault > > { > > BoxOperationDocument doc = > BoxOperationDocument.Factory.newInstance(); > > BoxType box = doc.addNewBoxOperation(); > > box.setWidth(BigInteger.valueOf(555)); > > box.setHeight(BigInteger.valueOf(555)); > > Element param1 = XmlUtils.getFirstElement(doc.getDomNode()); > > > > Element body = XmlUtils.createElement(IBoxCapability.OP_QNAME, > param1); > > Element response = invoke(IBoxCapability.OP_URI, body); > > return XmlUtils.extractText(response); > > } > > > > I am expecting to pass a single object in the request, but I am > > getting > an > > error indicating that two parameters are expected, not one. > > Attached is > the > > stack trace. Can anyone tell me what I'm doing wrong? > > -Vinh > > [attachment "ErrorTrace.txt" deleted by Daniel Jemiolo/Durham/IBM] > > -------------------------------------------------------------------- > > - 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] > > --------------------------------------------------------------------- > 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] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
