I'm having trouble configuring a spring-ws client to talk to the corresponding servlet. The current issue is that running connection.call(message, endpoint) produces the following output:
Code:
Mar 7, 2008 8:59:24 AM com.sun.xml.messaging.saaj.soap.MessageImpl saveChanges
SEVERE: SAAJ0540: Error during saving a multipart message
java.security.PrivilegedActionException: com.sun.xml.messaging.saaj.SOAPExceptionImpl: Error during saving a multipart message
I'm assuming this is related to either a malformed message, or an incorrect configuration setting for the servlet. I'm testing against apache tomcat 5.5. Here's the client code:
Code:
try {
            // Create a SOAPConnection
            SOAPConnectionFactory factory = SOAPConnectionFactory.newInstance();

            SOAPConnection connection = factory.createConnection();
            // Create a SOAPMessage
            MessageFactory messageFactory = MessageFactory.newInstance();
            SOAPMessage message = messageFactory.createMessage();

            SOAPPart soapPart = message.getSOAPPart();
            SOAPEnvelope envelope = soapPart.getEnvelope();
            envelope.addNamespaceDeclaration("xsd","http://www.w3.org/2001/XMLSchema");
            envelope.addNamespaceDeclaration("xsi","http://www.w3.org/2001/XMLSchema-instance");
            envelope.addNamespaceDeclaration("enc","http://schemas.xmlsoap.org/soap/encoding/");
            envelope.addNamespaceDeclaration("env","http://schemas.xmlsoap.org/soap/envelope/");
            envelope.setEncodingStyle("http://schemas.xmlsoap.org/soap/encoding/");
            
            SOAPHeader header = envelope.getHeader();
            SOAPBody body = envelope.getBody();
            header.detachNode();
            // Create a SOAPBodyElement
            Name bodyName = envelope.createName("PersonLookupRequest", "p", "http://localhost:8080/pl/schemas");
            
            SOAPBodyElement bodyElement = body.addBodyElement(bodyName);
            bodyElement.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");
            bodyElement.setAttribute("xsi:schemaLocation", "http://localhost:8080/pl/schemas pl.xsd");


            // Insert Content
            SOAPElement symbol = bodyElement.addChildElement(envelope.createName("Name",
                    "p",
            "http://localhost:8080/pl/schemas"));
            symbol.addTextNode("p:SUNW");
            Name typeName = envelope.createName("type","xsi","string");
            
            symbol.addAttribute(typeName, "xsi:string");

            // Create an endpint point which is either URL or String type
            URL endpoint = new URL("http://localhost:8080/PersonLookup");

            // Check the input
            System.out.println(message.getSOAPPart().getEnvelope());
            
            // Send a SOAPMessage (request) and then wait for SOAPMessage (response)
            SOAPMessage response = connection.call(message, endpoint);

            System.out.println("\nRESPONSE:\n");
            // Create the transformer
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            // Extract the content of the reply
            Source sourceContent = response.getSOAPPart().getContent();
            // Set the output for the transformation
            StreamResult result = new StreamResult(System.out);
            transformer.transform(sourceContent, result);
            System.out.println();

            // Close the SOAPConnection
            connection.close();

        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
Which produces the soap request:
Code:
<?xml version="1.0" encoding="UTF-16"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Body><p:PersonLookupRequest xmlns:p="http://localhost:8080/pl/schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://localhost:8080/pl/schemas pl.xsd"><p:Name xmlns:xsi="string" xsi:type="xsi:string">p:SUNW</p:Name></p:PersonLookupRequest></SOAP-ENV:Body></SOAP-ENV:Envelope>
The schema from pl.xsd:
Code:
<?xml version="1.0" encoding="UTF-8"?>

        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://localhost:8080/pl/schemas"
xmlns="http://localhost:8080/pl/schemas"
elementFormDefault="qualified">
    <xs:element name="PersonLookupRequest">
        <xs:complexType>
            <xs:all>
                <xs:element name="Name" type="xs:string"/>       
            </xs:all>
        </xs:complexType>
    </xs:element>
    <xs:element name="PersonLookupResponse">
        <xs:complexType>
            <xs:all>
                <xs:element name="Name" type="xs:string"/>   
                <xs:element name="Email" type="xs:string"/>    
            </xs:all>
        </xs:complexType>
    </xs:element>
    
</xs:schema>
Help?