Hi,
I've back to working on transparent digital signature of the functional
tests. I've run into a problem that I don't know how to solve:
Sometime the client-side signer samples.security.ClientSigningHandler
works just fine -- most notably when used with
org.apache.axis.client.AdminClient. I can deploy all the services that
I want and the deployment requests all get signed just fine. When I
actually try to run a deployed test, I get:
Beginning Client signing...
java.io.IOException: No serializer found for class java.lang.String in
registry org.apache.axis.encoding.SerializationContextImpl@5c62d539
at
org.apache.axis.encoding.SerializationContextImpl.serializeActual(SerializationContextImpl.java:864)
at
org.apache.axis.encoding.SerializationContextImpl.serialize(SerializationContextImpl.java:526)
at org.apache.axis.message.RPCParam.serialize(RPCParam.java:133)
at org.apache.axis.message.RPCElement.outputImpl(RPCElement.java:198)
at
org.apache.axis.message.MessageElement.output(MessageElement.java:481)
at
org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:439)
at
org.apache.axis.message.MessageElement.output(MessageElement.java:481)
at
org.apache.axis.message.MessageElement.getAsDocument(MessageElement.java:423)
at
samples.security.SignedSOAPEnvelope.init(SignedSOAPEnvelope.java:118)
at
samples.security.SignedSOAPEnvelope.<init>(SignedSOAPEnvelope.java:101)
at
samples.security.ClientSigningHandler.invoke(ClientSigningHandler.java:99)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:71)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:151)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:118)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invoke(Call.java:1510)
at org.apache.axis.client.Call.invoke(Call.java:1327)
at org.apache.axis.client.Call.invoke(Call.java:1257)
at org.apache.axis.client.Call.invoke(Call.java:854)
at samples.stock.GetQuote.getQuote(GetQuote.java:124)
at samples.stock.GetQuote.main(GetQuote.java:138)
AxisFault
faultCode: http://xml.apache.org/axis/:Server.userException
faultString: java.lang.RuntimeException: java.io.IOException: No
serializer found for class java.lang.String in registry
org.apache.axis.encoding.SerializationContextImpl@5c62d539
faultActor: null
faultDetail:
stackTrace: java.lang.RuntimeException: java.io.IOException: No
serializer found for class java.lang.String in registry
org.apache.axis.encoding.SerializationContextImpl@5c62d539
at
samples.security.SignedSOAPEnvelope.init(SignedSOAPEnvelope.java:161)
at
samples.security.SignedSOAPEnvelope.<init>(SignedSOAPEnvelope.java:101)
at
samples.security.ClientSigningHandler.invoke(ClientSigningHandler.java:99)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:71)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:151)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:118)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invoke(Call.java:1510)
at org.apache.axis.client.Call.invoke(Call.java:1327)
at org.apache.axis.client.Call.invoke(Call.java:1257)
at org.apache.axis.client.Call.invoke(Call.java:854)
at samples.stock.GetQuote.getQuote(GetQuote.java:124)
at samples.stock.GetQuote.main(GetQuote.java:138)
The client handler works by getting the request message out of the
MessageContext that is passed to the handler's invoke method. It then
calls getSOAPEnvelope() to get an Envelope that can be signed. Signing
happens by creating a SignedSOAPEnvelope from the unsigned envelope. In
order to sign the envelope, I need to get it as a DOM tree. Calling
getAsDocument on the unsigned envelope is what causes the blowup.
It appears that the SerializationContextImpl that is being created is
being created with no mappings. I'm not familiar enough (yet) with the
code to figure out where the mappings should be getting created in this
case.
Any pointers would be greatly appreciated.
On a related note: A number of the tests us relative URIs for namespace
values in the .wsdl files. This turns into pain under XML Signature
because we have to canonicalize the message. It would save a lot of
hassle if we stopped using these relative URIs.
Ted