You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@santuario.apache.org by "GANDHIRAJAN,AYYAPPAN (HP-India,ex2)" <ay...@hp.com> on 2003/12/04 09:23:18 UTC

signing soap attachment

Hi folks,

I have been facing a problem while using signed soap RPC attachment. Let me
summarize as follows:

1) Create a header
2) Create a body that contains information about an operation. The operation
or method takes javax.activation.DataHandler as an input
3) Create envelope by combining header and body
4) Create a document from the envelope [Later, I will sign this document and
send the signed XML for invoking secured webservices]

I am able to succeed until step3. While I try to create the document object
at step 4, I am getting DataHandler serializer error. The error description
is as follows:

Exception in thread "main" java.lang.NullPointerException
        at
org.apache.axis.encoding.ser.JAFDataHandlerSerializer.serialize(JAFDa
taHandlerSerializer.java:96)
        at
org.apache.axis.encoding.SerializationContextImpl.serializeActual(Ser
ializationContextImpl.java:1247)
        at
org.apache.axis.encoding.SerializationContextImpl.serialize(Serializa
tionContextImpl.java:787)
        at org.apache.axis.message.RPCParam.serialize(RPCParam.java:225)
        at tests.java.com.hp.mesac.security.client.Test.serialize(Unknown
Source
)
        at
tests.java.com.hp.mesac.security.client.Test.getEnvelopeAsDocument(Un
known Source)
        at tests.java.com.hp.mesac.security.client.Test.main(Unknown Source)



The java source code is also given below. can some one help how I can
resolve it?

Thanks in advance.

Regards,
Ayyappan Gandhirajan

----------------------------------------------------------------------------
-------------------------------------------------------------

public class Test1{

    private static String SOAPSECNS =
"http://schemas.xmlsoap.org/soap/security/2000-12";
    private static String SOAPSECprefix = "SOAP-SEC";

	public static void main(String[] args) throws Exception{
		Test1 test = new Test1();

		String namespace = "http://tempuri.org";
		String methodName = "echo";

		System.out.println("File exists - "+new
File("test.txt").exists());
		DataHandler dh = new DataHandler(new
File("test.txt").toURL());
		System.out.println("File Name - "+dh.getName());
		Object[] paramValues = {dh};

		Document doc = test.getEnvelopeAsDocument(namespace,
methodName, paramValues);
		System.out.println("Document - "+doc);
	}

	public Document getEnvelopeAsDocument(String namespace, String
methodName, Object[] paramValues) throws Exception{
		System.out.println("Creating envelope....");
		//envelope
		SOAPEnvelope env = new SOAPEnvelope();
		env.addMapping(new Mapping(SOAPSECNS, SOAPSECprefix));
		env.addAttribute(Constants.URI_SOAP11_ENV, "actor",
"http://tempuri.org");
		env.addAttribute(Constants.URI_SOAP11_ENV, "mustUnderstand",
"1");

		System.out.println("Creating envelope.header....");
		//Header
		SOAPHeaderElement header = new
SOAPHeaderElement(XMLUtils.StringToElement(SOAPSECNS, "Signature", ""));
		env.addHeader(header);

		System.out.println("Creating envelope.body....");
		RPCElement bodyInfo = new RPCElement(namespace, methodName,
paramValues);
		env.addBodyElement(bodyInfo);

		System.out.println("");
		System.out.println("Envelope is ready. ---ENVELOPE
STARTS----");
		System.out.println("Is envelope NULL? - "+(env == null));
		System.out.println(env);
		System.out.println("Envelope is ready. ---ENVELOPE
ENDS----");
		System.out.println("");

		//Get as doc
		System.out.println("Trying to create document....");
		Document doc = getSOAPEnvelopeAsDocument(env);
		System.out.println("Document creation success");
		return doc;
	}

	private Document getSOAPEnvelopeAsDocument(SOAPEnvelope env) throws
Exception{
		MessageContext msgContext = null;

		StringWriter writer = new StringWriter();
		SerializationContext serializeContext = new
SerializationContextImpl(writer, msgContext);
		env.output(serializeContext);
		writer.close();

		Reader reader = new
StringReader(writer.getBuffer().toString());
		Document doc = XMLUtils.newDocument(new
InputSource(reader));
		if (doc == null){
			throw new Exception(Messages.getMessage("noDoc00",
writer.getBuffer().toString()));
		}
		return doc;
	}
}