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