You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Jesse Pangburn <Je...@us.lawson.com> on 2011/09/08 02:24:18 UTC

jaxws Provider doesn't allow override of outbound ws addressing headers

Hi,
I have a jaxws Provider configured to do WS-Addressing and the defaults seem to work fine.  However, if I try to override some of the WS-Addressing headers in the MessageContext, it gets ignored.  I've tried the following :

AddressingProperties wsaServer = new AddressingPropertiesImpl();
AttributedURIType aut = new AttributedURIType();
aut.setValue("urn:get:some");
wsaServer.setAction(aut);
messageContext.put(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND, wsaServer);

But the Action header sent in the response is the default from the WSDL, not my override value.  Am I doing something wrong or this never worked?  I've tried doing:
messageContext.get(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND)

But that returns null, so I've been using the put instead.  I tried overriding the messageId as well, but that didn't work either.

Thanks,
Jesse


jaxws Dispatch doesn't allow override of outbound ws addressing headers

Posted by Jesse Pangburn <Je...@us.lawson.com>.
Similar to the recent problem with jaxws Provider, the jaxws Dispatch doesn't allow override of outbound ws addressing headers either.  I tried setting with the following code:
AddressingProperties wsaClient = new AddressingPropertiesImpl();
// snipped out properties setting
// attach these properties to the outbound message object
disp.getRequestContext().put(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES_OUTBOUND, wsaClient);

The problem appears to be in the ContextUtils file again with these lines:
String mapProperty =
    ContextUtils.getMAPProperty(isProviderContext, 
                                isRequestor,
                                isOutbound);
LOG.log(Level.FINE,
        "retrieving MAPs from context property {0}",
        mapProperty);
AddressingPropertiesImpl maps =
    (AddressingPropertiesImpl)message.get(mapProperty);

The first time through this method we have isProviderContext==true, isRequestor==true, and isOutbound==true.  So mapProperty gets set to "javax.xml.ws.addressing.context" but the override data is stored in "javax.xml.ws.addressing.context.outbound" (because of the way I called it).  This is due to the following lookup code (also in ContextUtils):
public static String getMAPProperty(boolean isRequestor, 
                                boolean isProviderContext,
                                boolean isOutbound) {
return isRequestor
        ? isProviderContext
         ? CLIENT_ADDRESSING_PROPERTIES
         : isOutbound
           ? CLIENT_ADDRESSING_PROPERTIES_OUTBOUND
           : CLIENT_ADDRESSING_PROPERTIES_INBOUND
       : isOutbound
         ? SERVER_ADDRESSING_PROPERTIES_OUTBOUND
         : SERVER_ADDRESSING_PROPERTIES_INBOUND;
}

In this case isRequest and isProviderContext are true, so we end up with CLIENT_ADDRESSING_PROPERTIES instead of CLIENT_ADDRESSING_PROPERTIES_OUTBOUND.

Perhaps the problem is my understanding as this will work fine if I change my code to:
disp.getRequestContext().put(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES, wsaClient);

It just seems inconsistent to me to override the server side addressing properties by setting JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND but then for the client to have CLIENT_ADDRESSING_PROPERTIES_OUTBOUND be wrong and instead require CLIENT_ADDRESSING_PROPERTIES.  Am I just misunderstanding, or is this actually implemented wrong?  If it's wrong, is the fix to change getMAPProperty to:
return isRequestor
        ? isOutbound
         ? CLIENT_ADDRESSING_PROPERTIES_OUTBOUND
         : isProviderContext
         ? CLIENT_ADDRESSING_PROPERTIES
         : CLIENT_ADDRESSING_PROPERTIES_INBOUND
       : isOutbound
         ? SERVER_ADDRESSING_PROPERTIES_OUTBOUND
         : SERVER_ADDRESSING_PROPERTIES_INBOUND;

Or will that break something else?

Thanks,
Jesse


RE: jaxws Provider doesn't allow override of outbound ws addressing headers

Posted by Jesse Pangburn <Je...@us.lawson.com>.
This is now tracked as issue: https://issues.apache.org/jira/browse/CXF-3802

Thanks,
Jesse

-----Original Message-----
From: Daniel Kulp [mailto:dkulp@apache.org] 
Sent: Monday, September 12, 2011 12:11 PM
To: Jesse Pangburn
Cc: users@cxf.apache.org
Subject: Re: jaxws Provider doesn't allow override of outbound ws addressing headers

On Monday, September 12, 2011 2:09:13 PM Jesse Pangburn wrote:
> Hi Dan,
> Great!  That worked with the expected messageContext.put() after changing
> this line in your patch to: maps =
> (AddressingPropertiesImpl)message.getExchange().getInMessage().get(mapPrope
> rty);
> 
> For obvious reasons :-)  Thanks so much!  It's much better from the user
> point of view this way.
> 
> Do you want me to create an issue in Jira or you already are taking care of
> that?

Please do so so I don't forget about it.

Thanks!
Dan



> Thanks,
> Jesse
> 
> -----Original Message-----
> From: Daniel Kulp [mailto:dkulp@apache.org]
> Sent: Friday, September 09, 2011 2:13 PM
> To: users@cxf.apache.org
> Cc: Jesse Pangburn
> Subject: Re: jaxws Provider doesn't allow override of outbound ws addressing
> headers
> 
> 
> This might be a simple enhancement request.   Are you able to build CXF
> source and test?    I think a simple change like:
> 
> ---
> a/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
> +++
> b/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
> @@ -279,6 +279,9 @@ public final class ContextUtils {
>                  mapProperty);
>          AddressingPropertiesImpl maps =
>              (AddressingPropertiesImpl)message.get(mapProperty);
> +        if (maps == null && isOutbound && !isRequestor) {
> +            message.getExchange().getInMessage().get(mapProperty);
> +        }
>          if (maps != null) {
>              LOG.log(Level.FINE, "current MAPs {0}", maps);
>          } else if (!isProviderContext) {
> 
> 
> would work in this case.    Basically, on the outbound server side, if the
> message doesn't have the map with the key, check the inbound message (where
> the JAX-WS context would have stored it).
> 
> Dan
> 
> On Wednesday, September 07, 2011 9:26:31 PM Jesse Pangburn wrote:
> > Debugging through the code illustrates that you can't just set this
> > property on the MessageContext object for the Provider, you must set it
> > on the outbound message object, like this:
> > ((org.apache.cxf.jaxws.context.WrappedMessageContext)messageContext).get
> > Wra
> > ppedMessage().getExchange().getOutMessage().put(JAXWSAConstants.SERVER_
> > ADDRE SSING_PROPERTIES_OUTBOUND, wsaServer);
> > 
> > So the working code for me becomes something like:
> > AddressingProperties wsaServer = new AddressingPropertiesImpl();
> > AttributedURIType aut = new AttributedURIType();
> > aut.setValue("urn:get:some");
> > wsaServer.setAction(aut);
> > ((org.apache.cxf.jaxws.context.WrappedMessageContext)messageContext).get
> > Wrap
> > pedMessage().getExchange().getOutMessage().put(JAXWSAConstants.SERVER_A
> > DDRES SING_PROPERTIES_OUTBOUND, wsaServer);
> > 
> > I've tried overriding the message id and the action headers, both were
> > successful.  Still, I'm wondering if it's a bug to have to jump through
> > all these hoops to set that on the outbound message.  Shouldn't it
> > inherit from the MessageContext or something?  The outbound message
> > seems to get the inbound addressing properties assigned just fine.
> > 
> > Thanks,
> > Jesse
> > 
> > -----Original Message-----
> > From: Jesse Pangburn [mailto:Jesse.Pangburn@us.lawson.com]
> > Sent: Wednesday, September 07, 2011 5:24 PM
> > To: users@cxf.apache.org
> > Subject: jaxws Provider doesn't allow override of outbound ws addressing
> > headers
> > 
> > Hi,
> > I have a jaxws Provider configured to do WS-Addressing and the defaults
> > seem to work fine.  However, if I try to override some of the
> > WS-Addressing headers in the MessageContext, it gets ignored.  I've
> > tried the following :
> > 
> > AddressingProperties wsaServer = new AddressingPropertiesImpl();
> > AttributedURIType aut = new AttributedURIType();
> > aut.setValue("urn:get:some");
> > wsaServer.setAction(aut);
> > messageContext.put(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND
> > ,
> > wsaServer);
> > 
> > But the Action header sent in the response is the default from the WSDL,
> > not my override value.  Am I doing something wrong or this never
> > worked?  I've tried doing:
> > messageContext.get(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND
> > )
> > 
> > But that returns null, so I've been using the put instead.  I tried
> > overriding the messageId as well, but that didn't work either.
> > 
> > Thanks,
> > Jesse
-- 
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com



Re: jaxws Provider doesn't allow override of outbound ws addressing headers

Posted by Daniel Kulp <dk...@apache.org>.
On Monday, September 12, 2011 2:09:13 PM Jesse Pangburn wrote:
> Hi Dan,
> Great!  That worked with the expected messageContext.put() after changing
> this line in your patch to: maps =
> (AddressingPropertiesImpl)message.getExchange().getInMessage().get(mapPrope
> rty);
> 
> For obvious reasons :-)  Thanks so much!  It's much better from the user
> point of view this way.
> 
> Do you want me to create an issue in Jira or you already are taking care of
> that?

Please do so so I don't forget about it.

Thanks!
Dan



> Thanks,
> Jesse
> 
> -----Original Message-----
> From: Daniel Kulp [mailto:dkulp@apache.org]
> Sent: Friday, September 09, 2011 2:13 PM
> To: users@cxf.apache.org
> Cc: Jesse Pangburn
> Subject: Re: jaxws Provider doesn't allow override of outbound ws addressing
> headers
> 
> 
> This might be a simple enhancement request.   Are you able to build CXF
> source and test?    I think a simple change like:
> 
> ---
> a/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
> +++
> b/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
> @@ -279,6 +279,9 @@ public final class ContextUtils {
>                  mapProperty);
>          AddressingPropertiesImpl maps =
>              (AddressingPropertiesImpl)message.get(mapProperty);
> +        if (maps == null && isOutbound && !isRequestor) {
> +            message.getExchange().getInMessage().get(mapProperty);
> +        }
>          if (maps != null) {
>              LOG.log(Level.FINE, "current MAPs {0}", maps);
>          } else if (!isProviderContext) {
> 
> 
> would work in this case.    Basically, on the outbound server side, if the
> message doesn't have the map with the key, check the inbound message (where
> the JAX-WS context would have stored it).
> 
> Dan
> 
> On Wednesday, September 07, 2011 9:26:31 PM Jesse Pangburn wrote:
> > Debugging through the code illustrates that you can't just set this
> > property on the MessageContext object for the Provider, you must set it
> > on the outbound message object, like this:
> > ((org.apache.cxf.jaxws.context.WrappedMessageContext)messageContext).get
> > Wra
> > ppedMessage().getExchange().getOutMessage().put(JAXWSAConstants.SERVER_
> > ADDRE SSING_PROPERTIES_OUTBOUND, wsaServer);
> > 
> > So the working code for me becomes something like:
> > AddressingProperties wsaServer = new AddressingPropertiesImpl();
> > AttributedURIType aut = new AttributedURIType();
> > aut.setValue("urn:get:some");
> > wsaServer.setAction(aut);
> > ((org.apache.cxf.jaxws.context.WrappedMessageContext)messageContext).get
> > Wrap
> > pedMessage().getExchange().getOutMessage().put(JAXWSAConstants.SERVER_A
> > DDRES SING_PROPERTIES_OUTBOUND, wsaServer);
> > 
> > I've tried overriding the message id and the action headers, both were
> > successful.  Still, I'm wondering if it's a bug to have to jump through
> > all these hoops to set that on the outbound message.  Shouldn't it
> > inherit from the MessageContext or something?  The outbound message
> > seems to get the inbound addressing properties assigned just fine.
> > 
> > Thanks,
> > Jesse
> > 
> > -----Original Message-----
> > From: Jesse Pangburn [mailto:Jesse.Pangburn@us.lawson.com]
> > Sent: Wednesday, September 07, 2011 5:24 PM
> > To: users@cxf.apache.org
> > Subject: jaxws Provider doesn't allow override of outbound ws addressing
> > headers
> > 
> > Hi,
> > I have a jaxws Provider configured to do WS-Addressing and the defaults
> > seem to work fine.  However, if I try to override some of the
> > WS-Addressing headers in the MessageContext, it gets ignored.  I've
> > tried the following :
> > 
> > AddressingProperties wsaServer = new AddressingPropertiesImpl();
> > AttributedURIType aut = new AttributedURIType();
> > aut.setValue("urn:get:some");
> > wsaServer.setAction(aut);
> > messageContext.put(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND
> > ,
> > wsaServer);
> > 
> > But the Action header sent in the response is the default from the WSDL,
> > not my override value.  Am I doing something wrong or this never
> > worked?  I've tried doing:
> > messageContext.get(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND
> > )
> > 
> > But that returns null, so I've been using the put instead.  I tried
> > overriding the messageId as well, but that didn't work either.
> > 
> > Thanks,
> > Jesse
-- 
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com

RE: jaxws Provider doesn't allow override of outbound ws addressing headers

Posted by Jesse Pangburn <Je...@us.lawson.com>.
Hi Dan,
Great!  That worked with the expected messageContext.put() after changing this line in your patch to:
maps = (AddressingPropertiesImpl)message.getExchange().getInMessage().get(mapProperty);

For obvious reasons :-)  Thanks so much!  It's much better from the user point of view this way.

Do you want me to create an issue in Jira or you already are taking care of that?

Thanks,
Jesse

-----Original Message-----
From: Daniel Kulp [mailto:dkulp@apache.org] 
Sent: Friday, September 09, 2011 2:13 PM
To: users@cxf.apache.org
Cc: Jesse Pangburn
Subject: Re: jaxws Provider doesn't allow override of outbound ws addressing headers


This might be a simple enhancement request.   Are you able to build CXF source 
and test?    I think a simple change like:

--- a/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
+++ b/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
@@ -279,6 +279,9 @@ public final class ContextUtils {
                 mapProperty);
         AddressingPropertiesImpl maps =
             (AddressingPropertiesImpl)message.get(mapProperty);
+        if (maps == null && isOutbound && !isRequestor) {
+            message.getExchange().getInMessage().get(mapProperty);
+        }
         if (maps != null) {
             LOG.log(Level.FINE, "current MAPs {0}", maps);
         } else if (!isProviderContext) {


would work in this case.    Basically, on the outbound server side, if the 
message doesn't have the map with the key, check the inbound message (where 
the JAX-WS context would have stored it).

Dan



On Wednesday, September 07, 2011 9:26:31 PM Jesse Pangburn wrote:
> Debugging through the code illustrates that you can't just set this property
> on the MessageContext object for the Provider, you must set it on the
> outbound message object, like this:
> ((org.apache.cxf.jaxws.context.WrappedMessageContext)messageContext).getWra
> ppedMessage().getExchange().getOutMessage().put(JAXWSAConstants.SERVER_ADDRE
> SSING_PROPERTIES_OUTBOUND, wsaServer);
> 
> So the working code for me becomes something like:
> AddressingProperties wsaServer = new AddressingPropertiesImpl();
> AttributedURIType aut = new AttributedURIType();
> aut.setValue("urn:get:some");
> wsaServer.setAction(aut);
> ((org.apache.cxf.jaxws.context.WrappedMessageContext)messageContext).getWrap
> pedMessage().getExchange().getOutMessage().put(JAXWSAConstants.SERVER_ADDRES
> SING_PROPERTIES_OUTBOUND, wsaServer);
> 
> I've tried overriding the message id and the action headers, both were
> successful.  Still, I'm wondering if it's a bug to have to jump through all
> these hoops to set that on the outbound message.  Shouldn't it inherit from
> the MessageContext or something?  The outbound message seems to get the
> inbound addressing properties assigned just fine.
> 
> Thanks,
> Jesse
> 
> -----Original Message-----
> From: Jesse Pangburn [mailto:Jesse.Pangburn@us.lawson.com]
> Sent: Wednesday, September 07, 2011 5:24 PM
> To: users@cxf.apache.org
> Subject: jaxws Provider doesn't allow override of outbound ws addressing
> headers
> 
> Hi,
> I have a jaxws Provider configured to do WS-Addressing and the defaults seem
> to work fine.  However, if I try to override some of the WS-Addressing
> headers in the MessageContext, it gets ignored.  I've tried the following :
> 
> AddressingProperties wsaServer = new AddressingPropertiesImpl();
> AttributedURIType aut = new AttributedURIType();
> aut.setValue("urn:get:some");
> wsaServer.setAction(aut);
> messageContext.put(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND,
> wsaServer);
> 
> But the Action header sent in the response is the default from the WSDL, not
> my override value.  Am I doing something wrong or this never worked?  I've
> tried doing:
> messageContext.get(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND)
> 
> But that returns null, so I've been using the put instead.  I tried
> overriding the messageId as well, but that didn't work either.
> 
> Thanks,
> Jesse
-- 
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com



Re: jaxws Provider doesn't allow override of outbound ws addressing headers

Posted by Daniel Kulp <dk...@apache.org>.
This might be a simple enhancement request.   Are you able to build CXF source 
and test?    I think a simple change like:

--- a/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
+++ b/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
@@ -279,6 +279,9 @@ public final class ContextUtils {
                 mapProperty);
         AddressingPropertiesImpl maps =
             (AddressingPropertiesImpl)message.get(mapProperty);
+        if (maps == null && isOutbound && !isRequestor) {
+            message.getExchange().getInMessage().get(mapProperty);
+        }
         if (maps != null) {
             LOG.log(Level.FINE, "current MAPs {0}", maps);
         } else if (!isProviderContext) {


would work in this case.    Basically, on the outbound server side, if the 
message doesn't have the map with the key, check the inbound message (where 
the JAX-WS context would have stored it).

Dan



On Wednesday, September 07, 2011 9:26:31 PM Jesse Pangburn wrote:
> Debugging through the code illustrates that you can't just set this property
> on the MessageContext object for the Provider, you must set it on the
> outbound message object, like this:
> ((org.apache.cxf.jaxws.context.WrappedMessageContext)messageContext).getWra
> ppedMessage().getExchange().getOutMessage().put(JAXWSAConstants.SERVER_ADDRE
> SSING_PROPERTIES_OUTBOUND, wsaServer);
> 
> So the working code for me becomes something like:
> AddressingProperties wsaServer = new AddressingPropertiesImpl();
> AttributedURIType aut = new AttributedURIType();
> aut.setValue("urn:get:some");
> wsaServer.setAction(aut);
> ((org.apache.cxf.jaxws.context.WrappedMessageContext)messageContext).getWrap
> pedMessage().getExchange().getOutMessage().put(JAXWSAConstants.SERVER_ADDRES
> SING_PROPERTIES_OUTBOUND, wsaServer);
> 
> I've tried overriding the message id and the action headers, both were
> successful.  Still, I'm wondering if it's a bug to have to jump through all
> these hoops to set that on the outbound message.  Shouldn't it inherit from
> the MessageContext or something?  The outbound message seems to get the
> inbound addressing properties assigned just fine.
> 
> Thanks,
> Jesse
> 
> -----Original Message-----
> From: Jesse Pangburn [mailto:Jesse.Pangburn@us.lawson.com]
> Sent: Wednesday, September 07, 2011 5:24 PM
> To: users@cxf.apache.org
> Subject: jaxws Provider doesn't allow override of outbound ws addressing
> headers
> 
> Hi,
> I have a jaxws Provider configured to do WS-Addressing and the defaults seem
> to work fine.  However, if I try to override some of the WS-Addressing
> headers in the MessageContext, it gets ignored.  I've tried the following :
> 
> AddressingProperties wsaServer = new AddressingPropertiesImpl();
> AttributedURIType aut = new AttributedURIType();
> aut.setValue("urn:get:some");
> wsaServer.setAction(aut);
> messageContext.put(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND,
> wsaServer);
> 
> But the Action header sent in the response is the default from the WSDL, not
> my override value.  Am I doing something wrong or this never worked?  I've
> tried doing:
> messageContext.get(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND)
> 
> But that returns null, so I've been using the put instead.  I tried
> overriding the messageId as well, but that didn't work either.
> 
> Thanks,
> Jesse
-- 
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com

RE: jaxws Provider doesn't allow override of outbound ws addressing headers

Posted by Jesse Pangburn <Je...@us.lawson.com>.
Debugging through the code illustrates that you can't just set this property on the MessageContext object for the Provider, you must set it on the outbound message object, like this:
((org.apache.cxf.jaxws.context.WrappedMessageContext)messageContext).getWrappedMessage().getExchange().getOutMessage().put(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND, wsaServer);

So the working code for me becomes something like:
AddressingProperties wsaServer = new AddressingPropertiesImpl();
AttributedURIType aut = new AttributedURIType();
aut.setValue("urn:get:some");
wsaServer.setAction(aut);
((org.apache.cxf.jaxws.context.WrappedMessageContext)messageContext).getWrappedMessage().getExchange().getOutMessage().put(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND, wsaServer);

I've tried overriding the message id and the action headers, both were successful.  Still, I'm wondering if it's a bug to have to jump through all these hoops to set that on the outbound message.  Shouldn't it inherit from the MessageContext or something?  The outbound message seems to get the inbound addressing properties assigned just fine.

Thanks,
Jesse

-----Original Message-----
From: Jesse Pangburn [mailto:Jesse.Pangburn@us.lawson.com] 
Sent: Wednesday, September 07, 2011 5:24 PM
To: users@cxf.apache.org
Subject: jaxws Provider doesn't allow override of outbound ws addressing headers

Hi,
I have a jaxws Provider configured to do WS-Addressing and the defaults seem to work fine.  However, if I try to override some of the WS-Addressing headers in the MessageContext, it gets ignored.  I've tried the following :

AddressingProperties wsaServer = new AddressingPropertiesImpl();
AttributedURIType aut = new AttributedURIType();
aut.setValue("urn:get:some");
wsaServer.setAction(aut);
messageContext.put(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND, wsaServer);

But the Action header sent in the response is the default from the WSDL, not my override value.  Am I doing something wrong or this never worked?  I've tried doing:
messageContext.get(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND)

But that returns null, so I've been using the put instead.  I tried overriding the messageId as well, but that didn't work either.

Thanks,
Jesse