You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Michael Woinoski <mi...@pineneedleconsulting.com> on 2003/10/24 17:00:46 UTC
Using client-config.wsdd to deploy a javax.xml.rpc.handler.Handler
I have written a Handler that implements javax.xml.rpc.handler.Handler. When I
try to deploy it on a client using client-config.wsdd, Axis throws a fault. The
same client-config.wsdd works fine if I replace the class with a class that
extends org.apache.axis.handlers.BasicHandler, and I can configure my original
handler on the server side with deploy.wsdd.
The Axis WSDDDeployableItem class attempts to cast my handler to
org.apache.axis.Handler, which throws a ClassCastException. Is there some option
I can set in client-config.wsdd that will deploy the
javax.xml.rpc.handler.Handler? Or is it only possible by adding the Handler in
the client programatically, as in the jaxrpc/hello/HelloClient.java sample?
Thanks,
Mike
------------------------- Here's the Fault: ----------------------------------
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.apache.axis.ConfigurationException:
java.lang.ClassCastException
java.lang.ClassCastException
at
org.apache.axis.deployment.wsdd.WSDDDeployableItem.makeNewInstance(WSDDDeployableItem.java:338)
at
org.apache.axis.deployment.wsdd.WSDDDeployableItem.getNewInstance(WSDDDeployableItem.java:310)
at
org.apache.axis.deployment.wsdd.WSDDDeployableItem.getInstance(WSDDDeployableItem.java:296)
at
org.apache.axis.deployment.wsdd.WSDDDeployment.getHandler(WSDDDeployment.java:455)
at
org.apache.axis.deployment.wsdd.WSDDDeployableItem.getNewInstance(WSDDDeployableItem.java:312)
at
org.apache.axis.deployment.wsdd.WSDDDeployableItem.getInstance(WSDDDeployableItem.java:296)
at
org.apache.axis.deployment.wsdd.WSDDChain.makeNewInstance(WSDDChain.java:164)
at
org.apache.axis.deployment.wsdd.WSDDDeployableItem.getNewInstance(WSDDDeployableItem.java:310)
at
org.apache.axis.deployment.wsdd.WSDDDeployableItem.getInstance(WSDDDeployableItem.java:296)
at
org.apache.axis.deployment.wsdd.WSDDDeployment.getGlobalRequest(WSDDDeployment.java:531)
at
org.apache.axis.configuration.FileProvider.getGlobalRequest(FileProvider.java:294)
at org.apache.axis.AxisEngine.getGlobalRequest(AxisEngine.java:304)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:166)
at org.apache.axis.client.Call.invokeEngine(Call.java:2564)
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
service.weather.AirportWeatherPortSoapBindingStub.getTemp(AirportWeatherPortSoapBindingStub.java:243)
at ServiceTestClient.main(ServiceTestClient.java:29)
----------- Here's the client-config.wsdd:-------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<!-- the handler that implements javax.xml.rpc.handler.Handler
causes a fault -->
<handler name="log" type="java:client.MessageHandler"/>
<!-- the following BasicHandler subclass works fine -->
<!--<handler name="log" type="java:client.SOAPMonitor"/>-->
<globalConfiguration>
<requestFlow>
<handler type="log"/>
</requestFlow>
<responseFlow>
<handler type="log"/>
</responseFlow>
</globalConfiguration>
<transport name="java"
pivot="java:org.apache.axis.transport.java.JavaSender"/>
<transport name="http"
pivot="java:org.apache.axis.transport.http.HTTPSender"/>
<transport name="local"
pivot="java:org.apache.axis.transport.local.LocalSender"/>
</deployment>
------------------- Here's the handler class: --------------------------------
package client;
import java.util.Iterator;
import javax.xml.namespace.QName;
import javax.xml.rpc.JAXRPCException;
import javax.xml.rpc.handler.Handler;
import javax.xml.rpc.handler.HandlerInfo;
import javax.xml.rpc.handler.MessageContext;
import javax.xml.rpc.handler.soap.SOAPMessageContext;
import javax.xml.soap.*;
public class MessageHandler implements Handler {
public MessageHandler() {
}
public void init(HandlerInfo config) {
}
public boolean handleRequest(MessageContext context) throws
JAXRPCException {
log.info("supplier.MessageHandler: In handleRequest");
SOAPMessage request = ((SOAPMessageContext)context).getMessage();
handleRequestMessage(request);
return true;
}
public boolean handleResponse(MessageContext context) throws
JAXRPCException {
log.info("supplier.MessageHandler: In handleResponse");
SOAPMessage response = ((SOAPMessageContext)context).getMessage();
handleResponseMessage(response);
return true;
}
public boolean handleFault(MessageContext context) {
log.info("supplier.MessageHandler: In handleFault");
return true;
}
public void destroy() { }
public QName[] getHeaders() {
return null;
}
private void handleRequestMessage(SOAPMessage response) {
logMessage(response);
}
private void handleResponseMessage(SOAPMessage response) {
logMessage(response);
}
private void logMessage(SOAPMessage msg) throws JAXRPCException {
try {
log.info("Message:");
log.info(msg.getSOAPPart().getEnvelope().toString());
}
catch (SOAPException e) {
log.error("Error processing SOAP message: " + e);
throw new JAXRPCException(e);
}
}
private static org.apache.log4j.Logger log =
org.apache.log4j.Logger.getLogger("com.ltree.crs577");
}
--
Mike Woinoski Pine Needle Consulting
mailto:michaelw@pineneedleconsulting.com
Re: Using client-config.wsdd to deploy a javax.xml.rpc.handler.Handler
Posted by Guillaume Sauthier <Gu...@Objectweb.org>.
Hello Micheal
In fact, you want to use JAX-RPC Handler. And you assume that Axis
Handlers are JAX-RPC Handlers. But it's not the case ...
There is a solution to use Jax-rpc handler in a config.wsdd file : here
an example :
<handlerInfoChain>
<handlerInfo classname="">
<parameter name="" value=""/>
<header qname="QNAME" xmlns:ns=""/>
</handlerInfo>
<role soapActorName="URI"/>
</handlerInfoChain>
Hope this help.
If this is not sufficient, search in the mailing list archive, somebody
has already answer to this question before.
Regards
Guillaume
Michael Woinoski wrote:
>
> I have written a Handler that implements javax.xml.rpc.handler.Handler. When I
> try to deploy it on a client using client-config.wsdd, Axis throws a fault. The
> same client-config.wsdd works fine if I replace the class with a class that
> extends org.apache.axis.handlers.BasicHandler, and I can configure my original
> handler on the server side with deploy.wsdd.
>
> The Axis WSDDDeployableItem class attempts to cast my handler to
> org.apache.axis.Handler, which throws a ClassCastException. Is there some option
> I can set in client-config.wsdd that will deploy the
> javax.xml.rpc.handler.Handler? Or is it only possible by adding the Handler in
> the client programatically, as in the jaxrpc/hello/HelloClient.java sample?
>
> Thanks,
> Mike
>
> ------------------------- Here's the Fault: ----------------------------------
>
> AxisFault
> faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
> faultSubcode:
> faultString: org.apache.axis.ConfigurationException:
> java.lang.ClassCastException
> java.lang.ClassCastException
> at
> org.apache.axis.deployment.wsdd.WSDDDeployableItem.makeNewInstance(WSDDDeployableItem.java:338)
> at
> org.apache.axis.deployment.wsdd.WSDDDeployableItem.getNewInstance(WSDDDeployableItem.java:310)
> at
> org.apache.axis.deployment.wsdd.WSDDDeployableItem.getInstance(WSDDDeployableItem.java:296)
> at
> org.apache.axis.deployment.wsdd.WSDDDeployment.getHandler(WSDDDeployment.java:455)
> at
> org.apache.axis.deployment.wsdd.WSDDDeployableItem.getNewInstance(WSDDDeployableItem.java:312)
> at
> org.apache.axis.deployment.wsdd.WSDDDeployableItem.getInstance(WSDDDeployableItem.java:296)
> at
> org.apache.axis.deployment.wsdd.WSDDChain.makeNewInstance(WSDDChain.java:164)
> at
> org.apache.axis.deployment.wsdd.WSDDDeployableItem.getNewInstance(WSDDDeployableItem.java:310)
> at
> org.apache.axis.deployment.wsdd.WSDDDeployableItem.getInstance(WSDDDeployableItem.java:296)
> at
> org.apache.axis.deployment.wsdd.WSDDDeployment.getGlobalRequest(WSDDDeployment.java:531)
> at
> org.apache.axis.configuration.FileProvider.getGlobalRequest(FileProvider.java:294)
> at org.apache.axis.AxisEngine.getGlobalRequest(AxisEngine.java:304)
> at org.apache.axis.client.AxisClient.invoke(AxisClient.java:166)
> at org.apache.axis.client.Call.invokeEngine(Call.java:2564)
> 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
> service.weather.AirportWeatherPortSoapBindingStub.getTemp(AirportWeatherPortSoapBindingStub.java:243)
> at ServiceTestClient.main(ServiceTestClient.java:29)
>
> ----------- Here's the client-config.wsdd:-------------------------------------
>
> <?xml version="1.0" encoding="UTF-8"?>
> <deployment xmlns="http://xml.apache.org/axis/wsdd/"
> xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
> <!-- the handler that implements javax.xml.rpc.handler.Handler
> causes a fault -->
> <handler name="log" type="java:client.MessageHandler"/>
>
> <!-- the following BasicHandler subclass works fine -->
> <!--<handler name="log" type="java:client.SOAPMonitor"/>-->
>
> <globalConfiguration>
> <requestFlow>
> <handler type="log"/>
> </requestFlow>
> <responseFlow>
> <handler type="log"/>
> </responseFlow>
> </globalConfiguration>
> <transport name="java"
> pivot="java:org.apache.axis.transport.java.JavaSender"/>
> <transport name="http"
> pivot="java:org.apache.axis.transport.http.HTTPSender"/>
> <transport name="local"
> pivot="java:org.apache.axis.transport.local.LocalSender"/>
> </deployment>
>
> ------------------- Here's the handler class: --------------------------------
>
> package client;
>
> import java.util.Iterator;
> import javax.xml.namespace.QName;
> import javax.xml.rpc.JAXRPCException;
> import javax.xml.rpc.handler.Handler;
> import javax.xml.rpc.handler.HandlerInfo;
> import javax.xml.rpc.handler.MessageContext;
> import javax.xml.rpc.handler.soap.SOAPMessageContext;
> import javax.xml.soap.*;
>
> public class MessageHandler implements Handler {
> public MessageHandler() {
> }
>
> public void init(HandlerInfo config) {
> }
>
> public boolean handleRequest(MessageContext context) throws
> JAXRPCException {
> log.info("supplier.MessageHandler: In handleRequest");
> SOAPMessage request = ((SOAPMessageContext)context).getMessage();
> handleRequestMessage(request);
> return true;
> }
>
> public boolean handleResponse(MessageContext context) throws
> JAXRPCException {
> log.info("supplier.MessageHandler: In handleResponse");
> SOAPMessage response = ((SOAPMessageContext)context).getMessage();
> handleResponseMessage(response);
> return true;
> }
>
> public boolean handleFault(MessageContext context) {
> log.info("supplier.MessageHandler: In handleFault");
> return true;
> }
>
> public void destroy() { }
>
> public QName[] getHeaders() {
> return null;
> }
>
> private void handleRequestMessage(SOAPMessage response) {
> logMessage(response);
> }
>
> private void handleResponseMessage(SOAPMessage response) {
> logMessage(response);
> }
>
> private void logMessage(SOAPMessage msg) throws JAXRPCException {
> try {
> log.info("Message:");
> log.info(msg.getSOAPPart().getEnvelope().toString());
> }
> catch (SOAPException e) {
> log.error("Error processing SOAP message: " + e);
> throw new JAXRPCException(e);
> }
> }
>
> private static org.apache.log4j.Logger log =
> org.apache.log4j.Logger.getLogger("com.ltree.crs577");
>
> }
>
> --
>
> Mike Woinoski Pine Needle Consulting
> mailto:michaelw@pineneedleconsulting.com