Hi there,
Im trying to use axis create a web service which
validates an xml document by using an xml schema. The
java class works fine when used outside axis and I
know that the xml doc is both well formed and valid.
When I try to validate using a web service I get the
stack trace below. I have also included the code for
both the java class and the client. Any help with this
would be much appreciated.
xception in thread "main" AxisFault
faultCode:
{http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString:
java.lang.reflect.InvocationTargetException
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:
AxisFault
faultCode:
{http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString:
java.lang.reflect.InvocationTargetException
faultActor:
faultNode:
faultDetail:
java.lang.reflect.InvocationTargetException
at
org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:260)
at
org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:169)
at
org.apache.axis.encoding.DeserializationContextImpl.endElement(DeserializationContextImpl.java:1015)
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.DTDConfiguration.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:375)
at
org.apache.axis.encoding.DeserializationContextImpl.parse(DeserializationContextImpl.java:242)
at
org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:538)
at
org.apache.axis.Message.getSOAPEnvelope(Message.java:376)
at
org.apache.axis.client.Call.invokeEngine(Call.java:2583)
at
org.apache.axis.client.Call.invoke(Call.java:2553)
at
org.apache.axis.client.Call.invoke(Call.java:2248)
at
org.apache.axis.client.Call.invoke(Call.java:2171)
at
org.apache.axis.client.Call.invoke(Call.java:1691)
at
XML5ValidatorClient.main(XML5ValidatorClient.java:58)
java.lang.reflect.InvocationTargetException
at
org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:260)
at
org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:169)
at
org.apache.axis.encoding.DeserializationContextImpl.endElement(DeserializationContextImpl.java:1015)
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.DTDConfiguration.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:375)
at
org.apache.axis.encoding.DeserializationContextImpl.parse(DeserializationContextImpl.java:242)
at
org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:538)
at
org.apache.axis.Message.getSOAPEnvelope(Message.java:376)
at
org.apache.axis.client.Call.invokeEngine(Call.java:2583)
at
org.apache.axis.client.Call.invoke(Call.java:2553)
at
org.apache.axis.client.Call.invoke(Call.java:2248)
at
org.apache.axis.client.Call.invoke(Call.java:2171)
at
org.apache.axis.client.Call.invoke(Call.java:1691)
at
XML5ValidatorClient.main(XML5ValidatorClient.java:58)
Java Class:
package WsTest.third;
import javax.xml.*;
import javax.xml.validation.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
public class XML5Validator {
public String validateSchema (String xsd, String xml)
{
if (xsd == null)
return "Schema document not specified";
else if (xml == null)
return "XML document not specified";
try {
// parse an XML document into a DOM tree
DocumentBuilder parser =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = parser.parse(new File(xml));
// create a SchemaFactory capable of
understanding WXS schemas
SchemaFactory factory =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
// load a WXS schema, represented by a Schema
instance
Source schemaFile = new StreamSource(new
File(xsd));
Schema schema = factory.newSchema(schemaFile);
// create a Validator instance, which can be used
to validate an instance document
Validator validator = schema.newValidator();
DOMSource dom = new DOMSource(document);
//validator.validate(new DOMSource(document));
validator.validate(dom);
} catch (SAXException e) {
//System.out.println("SAXException
"+e.getMessage());
return "SAXException "+e.getMessage();
} catch (IOException ioe) {
//System.out.println("IOException
"+ioe.getMessage());
return "IOException "+ioe.getMessage();
} catch (ParserConfigurationException pce) {
//System.out.println("ParserConfigurationException
"+pce.getMessage());
return "ParserConfigurationException
"+pce.getMessage();
}
return "XML document is valid";
}
}
and the client
public class XML5ValidatorClient
{
public static void main(String [] args) throws
Exception {
String host = "http://localhost:";
//String servicepath = "/axis/Quote.jws";
String servicepath = "/axis/servlet/AxisServlet";
Options options = new Options(args);
int port = options.getPort();
String endpoint = host + port + servicepath;
String method = null;
args = options.getRemainingArgs();
String op1 = null;
String op2 = null;
op1 = "/home/michael/java/catalog.xsd";
op2 = "/home/michael/java/catalog.xml";
String retStr = null;
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL
(endpoint));
call.addParameter("op1", XMLType.XSD_STRING,
ParameterMode.IN);
call.addParameter("op2", XMLType.XSD_STRING,
ParameterMode.IN);
call.setOperationName(new QName("XML5Validator",
"validateSchema"));
call.setReturnType(XMLType.XSD_STRING);
retStr = (String) call.invoke(new Object [] {op1,
op2});
System.out.println("Got result : " + retStr);
}
}
___________________________________________________________
Win a castle for NYE with your mates and Yahoo! Messenger
http://uk.messenger.yahoo.com