Anne, I got past the "Non nillable element 'photoRef' is null" exception by placing a dummy URI into the PhotoInfo object, probably not the right approach but I wanted to get to the point where I can actually send the SOAP request to the updated service. I've rebuilt the service with the new wsdl you suggested. Unfortunately I am getting the same "Invalid element" exception as originally reported. The SOAP package sent from client to server looks as before (with the exception of the additional photoRef element.
I am not sure that I am approaching this correctly. Can I use the wsdl approach with the latest release of AXIS to define a service that processing a SOAP with attachment message? Or am I too early in the AXIS development cycle? The samples included in the AXIS release don't seem to be using a wsdl at all. What is the recommended approach, given the current state of AXIS? regards, Karl -----Original Message----- From: Schwarz, Karl [mailto:[EMAIL PROTECTED] Sent: Monday, April 18, 2005 7:31 AM To: [email protected]; Anne Thomas Manes Subject: RE: Exception parsing complex data type Anne, Thanks for the help. I still have a few questions 1. I am sure that I would have never come up with the idea to define wrapper elements for addPhoto and replacePhoto operations. Do you have any links to reference material that describes this need. 2. I rebuilt my client side with the new wsdl and get the following exception: Non nillable element 'photoRef' is null This really doesn't surprise me since I took no steps in any code to set the photoRef element. So here's my question. Does one need to modify the addPhoto method in the xxxBindingStub class to expicity add the photo as a mime attachment part to the org.apache.axis.client.Call obect. What is then passed to the _call.invoke method? Do you just pass the com.examples.PhotoCatalog.types.PhotoInfo object and omit the image object since the attachment has already been added. I'm including the code snippet for the addPhoto method from xxxBindingStub class for reference public javax.xml.transform.Source addPhoto(com.examples.PhotoCatalog.types.PhotoInfo oldPhoto, java.awt.Image photo) throws java.rmi.RemoteException { if (super.cachedEndpoint == null) { throw new org.apache.axis.NoEndPointException(); } org.apache.axis.client.Call _call = createCall(); _call.setOperation(_operations[0]); _call.setUseSOAPAction(true); _call.setSOAPActionURI(""); _call.setEncodingStyle(null); _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE); _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE); _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS); _call.setOperationName(new javax.xml.namespace.QName("", "addPhoto")); setRequestHeaders(_call); setAttachments(_call); try { java.lang.Object _resp = _call.invoke(new java.lang.Object[] {oldPhoto, photo}); if (_resp instanceof java.rmi.RemoteException) { throw (java.rmi.RemoteException)_resp; } else { extractAttachments(_call); try { return (javax.xml.transform.Source) _resp; } catch (java.lang.Exception _exception) { return (javax.xml.transform.Source) org.apache.axis.utils.JavaUtils.convert(_resp, java.lang.String.class); } } } catch (org.apache.axis.AxisFault axisFaultException) { throw axisFaultException; regards Karl -----Original Message----- From: Anne Thomas Manes [mailto:[EMAIL PROTECTED] Sent: Friday, April 15, 2005 2:24 PM To: [email protected] Subject: Re: Exception parsing complex data type It turns out your WSDL isn't valid. Tell me if this is correct:: For the addPhoto operation, you want to pass in - the customer name (string) - a photo ID (int) - a photo (as an attachment) And you want to get in return - status (string) (currently you're trying to return this as an attachment, but I think you want to return it in the SOAP Body) For the replacePhoto operation, you want to pass in - the customer name (string) - a photo ID (int) - a photo (as an attachment) And you want to get in return - status (string) (currently you have this defined as type="wsi:swaRef", which doesn't make sense here. I assume that you want this to be a string returned in the SOAP Body) If that's the case, then here's a corrected WSDL: <wsdl:definitions name="PhotoCatalogService" targetNamespace="http://examples.com/PhotoCatalog" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:types="http://examples.com/PhotoCatalog/types" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://examples.com/PhotoCatalog"> <wsdl:types> <!-- ws-i schema --> <xsd:schema targetNamespace="http://ws-i.org/profiles/basic/1.1/xsd"> <xsd:simpleType name="swaRef"> <xsd:restriction base="xsd:anyURI" /> </xsd:simpleType> </xsd:schema> <!-- types namespace for this service --> <xsd:schema targetNamespace="http://examples.com/PhotoCatalog/types" xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd" xmlns:types="http://examples.com/PhotoCatalog/types"> <!-- Import the ws-i namespace --> <xsd:import namespace="http://ws-i.org/profiles/basic/1.1/xsd" /> <!-- schemaLocation="WS-ISwA.xsd"/> --> <!-- Wrapper elements to provide unique signatures for the addPhoto and replacePhoto operations --> <xsd:element name="addPhoto"> <xsd:complexType> <xsd:sequence> <xsd:element ref="types:photoInfo"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="replacePhoto"> <xsd:complexType> <xsd:sequence> <xsd:element ref="types:photoInfo"/> </xsd:sequence> </xsd:complexType> </xsd:element> <!-- Output for the addPhoto and replacePhoto operations. --> <xsd:element name="status" type="xsd:string" /> <!-- Input for the addPhoto and replacePhoto operations. --> <xsd:element name="photoInfo"> <xsd:complexType> <xsd:sequence> <xsd:element name="customerName" type="xsd:string"/> <xsd:element name="photoID" type="xsd:int"/> <xsd:element name="photoRef" type="wsi:swaRef"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="addPhotoRequest"> <!-- first part is the SOAP body --> <wsdl:part name="body" element="types:addPhoto"/> <!-- second part is the attachment --> <wsdl:part name="photo" type="xsd:base64Binary"/> </wsdl:message> <wsdl:message name="addPhotoResponse"> <wsdl:part name="body" element="types:status"/> </wsdl:message> <wsdl:message name="replacePhotoRequest"> <wsdl:part name="body" element="types:replacePhoto"/> <wsdl:part name="newPhoto" type="xsd:base64Binary"/> </wsdl:message> <wsdl:message name="replacePhotoResponse"> <wsdl:part name="status" element="types:status"/> </wsdl:message> <wsdl:portType name="PhotoCatalog"> <wsdl:operation name="addPhoto"> <wsdl:input message="tns:addPhotoRequest"/> <wsdl:output message="tns:addPhotoResponse"/> </wsdl:operation> <wsdl:operation name="replacePhoto"> <wsdl:input message="tns:replacePhotoRequest"/> <wsdl:output message="tns:replacePhotoResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="PhotoCatalogBinding" type="tns:PhotoCatalog"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="addPhoto"> <soap:operation soapAction="addPhoto"/> <wsdl:input> <mime:multipartRelated> <mime:part> <soap:body parts="body" use="literal"/> </mime:part> <mime:part> <mime:content part="photo" type="image/jpeg"/> </mime:part> </mime:multipartRelated> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="replacePhoto"> <soap:operation soapAction="replacePhoto"/> <wsdl:input> <mime:multipartRelated> <mime:part> <soap:body parts="body" use="literal"/> </mime:part> <mime:part> <mime:content part="newPhoto" type="image/jpeg"/> </mime:part> </mime:multipartRelated> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="PhotoCatalogService"> <wsdl:port name="PhotoCatalogPort" binding="tns:PhotoCatalogBinding"> <soap:address location="http://localhost:8080/jaxrpc-AttachmentsSample/photocatalog"/> </wsdl:port> </wsdl:service> </wsdl:definitions> On 4/15/05, Anne Thomas Manes <[EMAIL PROTECTED]> wrote: > Karl, > > I probably wouldn't select a SOAP w/ Attachments WSDL as my first test > case, but perhaps you enjoy self abuse... (I'm not sure that Axis > supports the WS-I Attachments profile.) > > In any case, the first error is caused by the fact that Axis generated > an RPC style message (it generated the "addPhoto" wrapper element), > which it wasn't supposed to do. > > I'd appreciate it if you could post the code generated by Axis before > you made the change to the WSDL. Axis should be able to consume any > valid WSDL, and you shouldn't need to add the <xsd:any> element. (And > the service wouldn't know how to process the contents of the <xsd:any> > anyway.) > > Regards, > Anne > > On 4/14/05, Schwarz, Karl <[EMAIL PROTECTED]> wrote: > > > > > > > > Hi, > > > > I need a little help getting started with AXIS. > > > > > > > > I've done some SOAP web services development a few years back using SUN > > JAXM, but I will be using AXIS for a webservice project in the near term. > > > > > > > > In order to get familiar with AXIS I did the GOOGLE thing and aquired a > > sample WDSL to try out. > > > > > > > > I am using 1.2RC3 version of AXIS with Tomcat 5.0.28. > > > > > > > > Here is the WSDL I first used: > > > > > > > > <wsdl:definitions > > > > name="PhotoCatalogService" > > > > targetNamespace="http://examples.com/PhotoCatalog" > > > > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" > > > > xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" > > > > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > > > > xmlns:types="http://examples.com/PhotoCatalog/types" > > > > xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" > > > > xmlns:tns="http://examples.com/PhotoCatalog"> > > > > <wsdl:types> > > > > <xsd:schema > > targetNamespace="http://examples.com/PhotoCatalog/types" > > > > xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd" > > > > xmlns:types="http://examples.com/PhotoCatalog/types"> > > > > <xsd:import > > namespace="http://ws-i.org/profiles/basic/1.1/xsd" > > schemaLocation="WS-ISwA.xsd"/> > > > > <!-- Status contains the references the old photo available as attachment. > > --> > > > > <xsd:element name="Status" type="wsi:swaRef" /> > > > > <!-- passed in as parameter of replacePhoto operation, contains the order. > > --> > > > > <xsd:element name="PhotoInfo"> > > > > <xsd:complexType> > > > > <xsd:sequence> > > > > <xsd:element name="customerName" type="xsd:string"/> > > > > <xsd:element name="photoID" type="xsd:int"/> > > > > </xsd:sequence> > > > > </xsd:complexType> > > > > </xsd:element> > > > > </xsd:schema> > > > > </wsdl:types> > > > > <wsdl:message name="addPhotoRequest"> > > > > <wsdl:part name="oldPhoto" element="types:PhotoInfo"/> > > > > <wsdl:part name="photo" type="xsd:hexBinary"/> > > > > </wsdl:message> > > > > <wsdl:message name="addPhotoResponse"> > > > > <wsdl:part name="status" type="xsd:string"/> > > > > </wsdl:message> > > > > <wsdl:message name="replacePhotoRequest"> > > > > <wsdl:part name="oldPhoto" element="types:PhotoInfo"/> > > > > <wsdl:part name="newPhoto" type="xsd:hexBinary"/> > > > > </wsdl:message> > > > > <wsdl:message name="replacePhotoResponse"> > > > > <wsdl:part name="status" element="types:Status"/> > > > > </wsdl:message> > > > > <wsdl:portType name="PhotoCatalog"> > > > > <wsdl:operation name="addPhoto"> > > > > <wsdl:input message="tns:addPhotoRequest"/> > > > > <wsdl:output message="tns:addPhotoResponse"/> > > > > </wsdl:operation> > > > > <wsdl:operation name="replacePhoto"> > > > > <wsdl:input message="tns:replacePhotoRequest"/> > > > > <wsdl:output message="tns:replacePhotoResponse"/> > > > > </wsdl:operation> > > > > </wsdl:portType> > > > > <wsdl:binding name="PhotoCatalogBinding" type="tns:PhotoCatalog"> > > > > <soap:binding style="document" > > transport="http://schemas.xmlsoap.org/soap/http"/> > > > > <wsdl:operation name="addPhoto"> > > > > <wsdl:input> > > > > <mime:multipartRelated> > > > > <mime:part> > > > > <soap:body parts="oldPhoto" use="literal"/> > > > > </mime:part> > > > > <mime:part> > > > > <mime:content part="photo" type="image/jpeg"/> > > > > </mime:part> > > > > </mime:multipartRelated> > > > > </wsdl:input> > > > > <wsdl:output> > > > > <mime:multipartRelated> > > > > <mime:part> > > > > <soap:body use="literal"/> > > > > </mime:part> > > > > <mime:part> > > > > <mime:content part="status" type="text/plain"/> > > > > <mime:content part="status" type="text/xml"/> > > > > </mime:part> > > > > </mime:multipartRelated> > > > > </wsdl:output> > > > > </wsdl:operation> > > > > <wsdl:operation name="replacePhoto"> > > > > <wsdl:input> > > > > <mime:multipartRelated> > > > > <mime:part> > > > > <soap:body parts="oldPhoto" use="literal"/> > > > > </mime:part> > > > > <mime:part> > > > > <mime:content part="newPhoto" type="image/jpeg"/> > > > > </mime:part> > > > > </mime:multipartRelated> > > > > </wsdl:input> > > > > <wsdl:output> > > > > <mime:multipartRelated> > > > > <mime:part> > > > > <soap:body parts="status" use="literal"/> > > > > </mime:part> > > > > </mime:multipartRelated> > > > > </wsdl:output> > > > > </wsdl:operation> > > > > </wsdl:binding> > > > > <wsdl:service name="PhotoCatalogService"> > > > > <wsdl:port name="PhotoCatalogPort" > > binding="tns:PhotoCatalogBinding"> > > > > <soap:address > > location="http://localhost:8080/jaxrpc-AttachmentsSample/photocatalog"/> > > > > </wsdl:port> > > > > </wsdl:service> > > > > </wsdl:definitions> > > > > > > > > When I used the previous WSDL to generate a service and then a client I got > > the following error on the client side when trying the "addPhoto" service: > > > > > > > > AxisFault > > > > faultCode: > > {http://schemas.xmlsoap.org/soap/envelope/}Server.userException > > > > faultSubcode: > > > > faultString: org.xml.sax.SAXException: Invalid element in > > com.examples.PhotoCatalog.types.PhotoInfo - PhotoInfo > > > > faultActor: > > > > faultNode: > > > > faultDetail: > > > > {http://xml.apache.org/axis/}hostname:tislaptop > > > > org.xml.sax.SAXException: Invalid element in > > com.examples.PhotoCatalog.types.PhotoInfo - PhotoInfo > > > > at > > org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:221) > > > > at > > org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:128) > > > > at > > org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087) > > > > at > > org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown > > Source) > > > > at > > org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown > > Source) > > > > at > > org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown > > Source) > > > > at > > org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown > > Source) > > > > at > > org.apache.xerces.parsers.XML11Configuration.parse(Unknown > > Source) > > > > at > > org.apache.xerces.parsers.XML11Configuration.parse(Unknown > > Source) > > > > at org.apache.xerces.parsers.XMLParser.parse(Unknown > > Source) > > > > at > > org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown > > Source) > > > > at javax.xml.parsers.SAXParser.parse(SAXParser.java:345) > > > > at > > org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227) > > > > at > > org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696) > > > > at > > org.apache.axis.Message.getSOAPEnvelope(Message.java:424) > > > > at > > org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:745) > > > > at > > org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:141) > > > > at > > org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) > > > > at > > org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) > > > > at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) > > > > at > > org.apache.axis.client.AxisClient.invoke(AxisClient.java:165) > > > > at org.apache.axis.client.Call.invokeEngine(Call.java:2754) > > > > at org.apache.axis.client.Call.invoke(Call.java:2737) > > > > at org.apache.axis.client.Call.invoke(Call.java:2413) > > > > at org.apache.axis.client.Call.invoke(Call.java:2336) > > > > at org.apache.axis.client.Call.invoke(Call.java:1793) > > > > at > > com.examples.PhotoCatalog.PhotoCatalogBindingStub.addPhoto(PhotoCatalogBindingStub.java:190) > > > > at > > com.examples.PhotoCatalog.PhotoCatalogProxy.addPhoto(PhotoCatalogProxy.java:45) > > > > at > > com.examples.PhotoCatalog.TestPhotoService.main(TestPhotoService.java:41) > > > > > > > > Here is an abridged network trace of the SOAP request sent from client to > > server... > > > > POST /axis/services/PhotoCatalogPort HTTP/ 1.0 > > > > Content-Type: > > multipart/related;type="text/xml";start="<DBB2B5537065926A4CBC8F8ED8D88F15>";boundary="----=_Part_0_20983130.1113483759295" > > > > Accept: application/soap+xml, application/dime, multipart/related, text/* > > > > User-Agent:Axis/1.2RC3 > > > > Host: xxx.xxx.xxx.xxx:8080 > > > > Cache-Control: no-cache > > > > Pragma: no-cache > > > > SOAPAction: "" > > > > Content-Length: 8466 > > > > ------=_Part_0_209831301113483759295 > > > > Content-Type: text/xml; charset=UTF-8 > > > > Content-Transfer-Encoding: binary > > > > Content-Id: <DBB2B5537065926A4CBC8F8ED8D88F15> > > > > <?xml version="1.0" encoding="UTF-8" ?> > > > > <soapenv:Envelope > > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" > > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > > xmlns:xsi="http://www.w3.org/2001/XML Schema-instance"> > > > > <soapenv:Body> > > > > <addPhoto xmlns=""> > > > > <ns1:PhotoInfo > > xmlns:ns1="http://examples.com/PhotoCatalog/types"> > > > > <customerName>karl</customerName> > > > > <photoID>100</photoID> > > > > </ns1:PhotoInfo> > > > > <photo href="cid:9AD6390B491EF0EE0B0FCEA7AA945655" > > xsi:type="ns2:Image" > > xmlns:ns2="http://xml.apache.org/xml-soap"/> > > > > </addPhoto> > > > > </soapenv:Body> > > > > </soapenv:Envelope> > > > > ------=_ Part_0_20983130.1113483759295 > > > > Content-Type:image/jpeg > > > > Content -Transfer-Encoding:binary > > > > Content-Id: <F2369DA809C4B1B0ADBA8538372E6F23> > > > > ...QE..QE....... > > > > ------=_Part_0_20983130.1113483759295 > > > > > > > > > > > > After a little searching I found some info that led me to change the WSDL a > > little. I redefined the "PhotoInfo" type as follows > > > > > > > > > > > > <xsd:element name="PhotoInfo"> > > > > <xsd:complexType> > > > > <xsd:sequence> > > > > <xsd:element name="customerName" type="xsd:string"/> > > > > <xsd:element name="photoID" type="xsd:int"/> > > > > <xsd:any processContents = "lax"/> > > > > </xsd:sequence> > > > > </xsd:complexType> > > > > </xsd:element> > > > > Now there is no exception thrown, but the PhotoInfo and photo objects are > > not deserialized. I get null values passed to the PhotoCatalogBindingImpl > > class. > > > > I noticed that an org.apache.axis.message.MessageElement[] > > object and associated methods was added to the PhotoInfo class, which I > > assume is due to adding the <xsd:any processContents = "lax"/> line to the > > WSDL. > > > > > > > > Here is the PhotoInfo and PhotoCatalogBindingImpl class source for > > reference: > > > > /** > > > > * PhotoCatalogBindingImpl.java > > > > * > > > > * This file was auto-generated from WSDL > > > > * by the Apache Axis 1.2RC3 Feb 28, 2005 (10:15:14 EST) WSDL2Java emitter. > > > > */ > > > > package com.examples.PhotoCatalog; > > > > import javax.xml.transform.Source; > > > > public class PhotoCatalogBindingImpl implements > > com.examples.PhotoCatalog.PhotoCatalog{ > > > > public javax.xml.transform.Source > > > > addPhoto(com.examples.PhotoCatalog.types.PhotoInfo > > oldPhoto, java.awt.Image photo) throws java.rmi.RemoteException { > > > > > > > > > > > > return null; > > > > } > > > > public org.apache.axis.types.URI > > replacePhoto(com.examples.PhotoCatalog.types.PhotoInfo > > oldPhoto, java.awt.Image newPhoto) throws java.rmi.RemoteException { > > > > return null; > > > > } > > > > } > > > > > > > > > > > > /** > > > > * PhotoInfo.java > > > > * > > > > * This file was auto-generated from WSDL > > > > * by the Apache Axis 1.2RC3 Feb 28, 2005 (10:15:14 EST) WSDL2Java emitter. > > > > */ > > > > package com.examples.PhotoCatalog.types; > > > > public class PhotoInfo implements java.io.Serializable, > > org.apache.axis.encoding.AnyContentType { > > > > private java.lang.String customerName; > > > > private int photoID; > > > > private org.apache.axis.message.MessageElement [] _any; > > > > public PhotoInfo() { > > > > } > > > > public PhotoInfo( > > > > org.apache.axis.message.MessageElement [] _any, > > > > java.lang.String customerName, > > > > int photoID) { > > > > this.customerName = customerName; > > > > this.photoID = photoID; > > > > this._any = _any; > > > > } > > > > > > > > /** > > > > * Gets the customerName value for this PhotoInfo. > > > > * > > > > * @return customerName > > > > */ > > > > public java.lang.String getCustomerName() { > > > > return customerName; > > > > } > > > > > > > > /** > > > > * Sets the customerName value for this PhotoInfo. > > > > * > > > > * @param customerName > > > > */ > > > > public void setCustomerName(java.lang.String customerName) { > > > > this.customerName = customerName; > > > > } > > > > > > > > /** > > > > * Gets the photoID value for this PhotoInfo. > > > > * > > > > * @return photoID > > > > */ > > > > public int getPhotoID() { > > > > return photoID; > > > > } > > > > > > > > /** > > > > * Sets the photoID value for this PhotoInfo. > > > > * > > > > * @param photoID > > > > */ > > > > public void setPhotoID(int photoID) { > > > > this.photoID = photoID; > > > > } > > > > > > > > /** > > > > * Gets the _any value for this PhotoInfo. > > > > * > > > > * @return _any > > > > */ > > > > public org.apache.axis.message.MessageElement [] get_any() > > { > > > > return _any; > > > > } > > > > > > > > /** > > > > * Sets the _any value for this PhotoInfo. > > > > * > > > > * @param _any > > > > */ > > > > public void set_any(org.apache.axis.message.MessageElement > > [] _any) { > > > > this._any = _any; > > > > } > > > > private java.lang.Object __equalsCalc = null; > > > > public synchronized boolean equals(java.lang.Object obj) { > > > > if (!(obj instanceof PhotoInfo)) return false; > > > > PhotoInfo other = (PhotoInfo) obj; > > > > if (obj == null) return false; > > > > if (this == obj) return true; > > > > if (__equalsCalc != null) { > > > > return (__equalsCalc == obj); > > > > } > > > > __equalsCalc = obj; > > > > boolean _equals; > > > > _equals = true && > > > > ((this.customerName==null && other.getCustomerName()==null) || > > > > (this.customerName!=null && > > > > this.customerName.equals(other.getCustomerName()))) && > > > > this.photoID == other.getPhotoID() && > > > > ((this._any==null && other.get_any()==null) || > > > > (this._any!=null && > > > > java.util.Arrays.equals(this._any, other.get_any()))); > > > > __equalsCalc = null; > > > > return _equals; > > > > } > > > > private boolean __hashCodeCalc = false; > > > > public synchronized int hashCode() { > > > > if (__hashCodeCalc) { > > > > return 0; > > > > } > > > > __hashCodeCalc = true; > > > > int _hashCode = 1; > > > > if (getCustomerName() != null) { > > > > _hashCode += getCustomerName().hashCode(); > > > > } > > > > _hashCode += getPhotoID(); > > > > if (get_any() != null) { > > > > for (int i=0; > > > > i<java.lang.reflect.Array.getLength(get_any()); > > > > i++) { > > > > java.lang.Object obj = java.lang.reflect.Array.get(get_any(), i); > > > > if (obj != null && > > > > !obj.getClass().isArray()) { > > > > _hashCode += obj.hashCode(); > > > > } > > > > } > > > > } > > > > __hashCodeCalc = false; > > > > return _hashCode; > > > > } > > > > // Type metadata > > > > private static org.apache.axis.description.TypeDesc > > typeDesc = > > > > new org.apache.axis.description.TypeDesc(PhotoInfo.class, > > true); > > > > static { > > > > typeDesc.setXmlType(new > > javax.xml.namespace.QName("http://examples.com/PhotoCatalog/types", > > ">PhotoInfo")); > > > > org.apache.axis.description.ElementDesc elemField = new > > org.apache.axis.description.ElementDesc(); > > > > elemField.setFieldName("customerName"); > > > > elemField.setXmlName(new javax.xml.namespace.QName("", "customerName")); > > > > elemField.setXmlType(new > > javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", > > "string")); > > > > typeDesc.addFieldDesc(elemField); > > > > elemField = new org.apache.axis.description.ElementDesc(); > > > > elemField.setFieldName("photoID"); > > > > elemField.setXmlName(new javax.xml.namespace.QName("", "photoID")); > > > > elemField.setXmlType(new > > javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", > > "int")); > > > > typeDesc.addFieldDesc(elemField); > > > > } > > > > /** > > > > * Return type metadata object > > > > */ > > > > public static org.apache.axis.description.TypeDesc > > getTypeDesc() { > > > > return typeDesc; > > > > } > > > > /** > > > > * Get Custom Serializer > > > > */ > > > > public static org.apache.axis.encoding.Serializer > > getSerializer( > > > > java.lang.String mechType, > > > > java.lang.Class _javaType, > > > > javax.xml.namespace.QName _xmlType) { > > > > return > > > > new org.apache.axis.encoding.ser.BeanSerializer( > > > > _javaType, _xmlType, typeDesc); > > > > } > > > > /** > > > > * Get Custom Deserializer > > > > */ > > > > public static org.apache.axis.encoding.Deserializer > > getDeserializer( > > > > java.lang.String mechType, > > > > java.lang.Class _javaType, > > > > javax.xml.namespace.QName _xmlType) { > > > > return > > > > new org.apache.axis.encoding.ser.BeanDeserializer( > > > > _javaType, _xmlType, typeDesc); > > > > } > > > > } > > > > > > > > I guess my questions are as follows: > > > > 1. Why is exception thrown in the first scenario? Is there something wrong > > with the WSDL? I guess there is, but I can't figure it out. > > > > 2. When the change is made to the WDSL(adding <xsd:any processContents = > > "lax"/>) is there something that I need to add to the PhotoInfo class > > > > to process the org.apache.axis.message.MessageElement[] > > object. Do I need to "manually" parse that object in the > > PhotoCatalogBindingImpl class to get > > > > the values of customerName and photoID? > > > > > > > > Any other help would be appreciated.. > > > > > > > > thanks, > > > > Karl Schwarz > > > > System Architect > > > > Northrop Grumman > > > > > > > > > > > > >
