You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "George Cowe (JIRA)" <ax...@ws.apache.org> on 2006/03/21 10:39:06 UTC

[jira] Commented: (AXIS-2436) using call.invoke() from client java program to invoke web service inserts empty namespace on all elements in message sent

    [ http://issues.apache.org/jira/browse/AXIS-2436?page=comments#action_12371200 ] 

George Cowe commented on AXIS-2436:
-----------------------------------

I have found a workaround to this problem -
The problem is caused by the test client's SOAPBodyElement constructor which takes a org.w3c.dom.Document as an argument. There seems to be a bug with this Axis class constructor.
If I switch to using the SOAPBodyElement with an InputStream as a constructor the problem goes away.


       

> using call.invoke() from client java program to invoke web service inserts empty namespace on all elements in message sent
> --------------------------------------------------------------------------------------------------------------------------
>
>          Key: AXIS-2436
>          URL: http://issues.apache.org/jira/browse/AXIS-2436
>      Project: Apache Axis
>         Type: Bug
>   Components: Serialization/Deserialization
>     Versions: 1.3
>  Environment: Windows XP 
>     Reporter: George Cowe

>
> I am attempting to use the message-style processing in a web service implemented in Axis 1.3. The client java program creates a SOAPBodyElement from my XML and uses call.invoke() to send it to the service. 
> Using XMLUtils.DocumentToString() I can see that the org.w3c.Document has been created successfully from the XML.
> However the error message returned states : 
> org.xml.sax.SAXParseException: The value of the attribute "prefix="xmlns",localpart="ce",rawname="xmlns:ce"" is invalid. Prefixed namespace bindings may not be empty.   
> Using a TCP/IP monitor I can see that Axis has inserted a blank namespace on all elements:  xmlns:ce="".
> The XML used to create the org.w3c.Document validates against my schema (which has a targetNameSpace defined as well as the xmlns:ce namespace).
> So I do not understand why the empty namespaces are being added to the document. 
> The client java program looks like this 
> package co.origoservices.ws.client;
> import java.io.File;
> import java.io.IOException;
> import java.net.URL;
> import java.util.Vector;
> import javax.xml.namespace.QName;
> import javax.xml.parsers.DocumentBuilder;
> import javax.xml.parsers.DocumentBuilderFactory;
> import javax.xml.parsers.ParserConfigurationException;
> import org.apache.axis.client.Call;
> import org.apache.axis.client.Service;
> import org.apache.axis.message.SOAPBodyElement;
> import org.apache.axis.utils.XMLUtils;
> import org.w3c.dom.Document;
> import org.xml.sax.SAXException;
> public class MsgClient {
> 	public static void main(String[] args) throws Exception {
> 		if (args.length != 1) {
> 			System.out.println("Please supply an xml filename");
> 			System.exit(1);
> 		}
> 		String xmlFileName = args[0];
> 		Document doc = null;
> 		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
> 		try {
> 			DocumentBuilder builder = factory.newDocumentBuilder();
> 			doc = builder.parse(new File(xmlFileName));
> 		} catch (SAXException sxe) {
> 			// Error generated during parsing
> 			Exception x = sxe;
> 			if (sxe.getException() != null)
> 				x = sxe.getException();
> 			x.printStackTrace();
> 		} catch (ParserConfigurationException pce) {
> 			// Parser with specified options can't be built
> 			pce.printStackTrace();
> 		} catch (IOException ioe) {
> 			// I/O error
> 			ioe.printStackTrace();
> 		}
> 		System.out.println("sending " + XMLUtils.DocumentToString(doc));
> 		Service service = new Service();
> 		Call call = (Call) service.createCall();
> //		String endpoint = "http://localhost:8181/AxisTestWeb/services/CEBondSingleContractService";
> 		String endpoint = "http://localhost:10766/AxisTestWeb/services/CEBondSingleContractService";
> 		call.setTargetEndpointAddress(new URL(endpoint));
> 		String operation = "echoDocument";
> 		call.setOperation(new QName(endpoint, operation), operation);
> 		SOAPBodyElement body = new SOAPBodyElement(doc.getDocumentElement());
> 		Vector result = (Vector) call.invoke(new Object[] { body });
> 		SOAPBodyElement sbe = (SOAPBodyElement) result.get(0);
> 		System.out.println("received " + XMLUtils.DocumentToString(sbe.getAsDocument()));
> 	}
> }
> the input XML looks like this
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <ce:ce_bond_single_contract_request xmlns:ce="http://www.origostandards.com/schema/ce/v2" 
> 			xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
> 			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> 			xsi:schemaLocation="http://www.origostandards.com/schema/ce/v2 ce_bond_single_contract_request.xsd">
> 	<ce:b_control>
> 		<ce:contract_enquiry_reference>CE123456</ce:contract_enquiry_reference>
> 	</ce:b_control>
> 	<ce:intermediary>
> 		<ce:company_name>IFA Company Ltd</ce:company_name>
> 		<ce:contact_details>
> 			<ce:name>Mr Fred Smith</ce:name>
> 			<ce:telephone_number>0131 523 4480</ce:telephone_number>
> 		</ce:contact_details>
> 	</ce:intermediary>
> 	<ce:request_scope>
> 		<ce:contract_details_required_ind>No</ce:contract_details_required_ind>
> 		<ce:valuation_currency>GBP</ce:valuation_currency>
> 		<ce:fund_code_type_required>SEDOL</ce:fund_code_type_required>
> 		<ce:valuation_request type="Current"/>
> 	</ce:request_scope>
> 	<ce:contract>
> 		<ce:contract_reference_number>A-284762-01</ce:contract_reference_number>
> 	</ce:contract>
> </ce:ce_bond_single_contract_request>
> 	
> and the abbreviated schema looks like this
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <xsd:schema targetNamespace="http://www.origostandards.com/schema/ce/v2"
> 			xmlns:ce="http://www.origostandards.com/schema/ce/v2" 
> 			xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
> 			elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.0">
> 	<xsd:element name="ce_bond_single_contract_request">
> 		<xsd:complexType>
> 			<xsd:sequence>
> 				<xsd:element ref="ce:b_control" minOccurs="0"/>
> 				<xsd:element name="intermediary" type="ce:IntermediaryForAuthentication" minOccurs="0"/>
> 				<xsd:element ref="ce:request_scope"/>
> 				<xsd:element ref="ce:contract"/>
> 			</xsd:sequence>
> 			<xsd:attributeGroup ref="ce:CommonAttributes"/>
> 		</xsd:complexType>
> 	</xsd:element>	
> .....
> Any advice would be much appreciated.
>          
>    

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira