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


Reply via email to