All,
I don't know what it is, but I have no luck.
Using this spring config:
<bean id="staticHandler"
class="org.mortbay.jetty.handler.ResourceHandler">
<property name="resourceBase" value="D:/temp/" />
</bean>
<httpj:engine-factory bus="cxf">
<httpj:engine port="9000">
<httpj:handlers>
<ref local="staticHandler"/>
</httpj:handlers>
</httpj:engine>
</httpj:engine-factory>
I receive the following jetty output:
21:26:47,281 INFO [log] jetty-6.1.9
21:26:47,296 DEBUG [log] Container [EMAIL PROTECTED] +
[EMAIL PROTECTED] as threadpool
21:26:47,296 DEBUG [log] started
[EMAIL PROTECTED]
21:26:47,312 DEBUG [log] starting [EMAIL PROTECTED]
21:26:47,312 DEBUG [log] started [EMAIL PROTECTED]
21:26:47,312 DEBUG [log] starting [EMAIL PROTECTED]
21:26:47,390 DEBUG [log] started
[EMAIL PROTECTED]
21:26:47,390 INFO [log] Started [EMAIL PROTECTED]:9000
21:26:47,406 DEBUG [log] started [EMAIL PROTECTED]:9000
21:26:47,406 DEBUG [log] started [EMAIL PROTECTED]
21:26:47,406 DEBUG [log] Container [EMAIL PROTECTED] +
[EMAIL PROTECTED],null} as handler
21:26:47,406 DEBUG [log] Container
[EMAIL PROTECTED],null} +
[EMAIL PROTECTED] as handler
21:26:47,453 DEBUG [log] Container
[EMAIL PROTECTED],null} +
[EMAIL PROTECTED] as errorHandler
21:26:47,453 DEBUG [log] starting [EMAIL PROTECTED]
21:26:47,453 DEBUG [log] started [EMAIL PROTECTED]
21:26:47,453 DEBUG [log] starting
[EMAIL PROTECTED],null}
21:26:47,453 DEBUG [log] starting [EMAIL PROTECTED]
21:26:47,453 DEBUG [log] started [EMAIL PROTECTED]
21:26:47,453 DEBUG [log] started
[EMAIL PROTECTED],null}
As you can see, only the ContextHandler for the werbservice is
started but
no additional ResourceHandler.
Looks like I have to stick with the extra java code or does somebody
have
another idea?
Thanks,
--Marcus
-----Ursprüngliche Nachricht-----
Von: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Im Auftrag
von
Sergey Beryozkin
Gesendet: Montag, 21. Juli 2008 13:13
An: [email protected]
Betreff: Re: AW: AW: Configure jetty to use static content
Hi,
We used this technique awhile back when working on a JAX-WS TCK for
CXF Fuse
:
<httpj:engine-factory bus="cxf">
<httpj:engine port="@SPRING_CONTAINER_PORT@">
<httpj:handlers>
<bean class="org.mortbay.jetty.handler.ResourceHandler">
<property name="baseResource">
<bean class="org.mortbay.resource.FileResource">
<constructor-arg value="file:/@TCK_REPOSITORY@"/>
</bean>
</property>
</bean>
</httpj:handlers>
</httpj:engine>
</httpj:engine-factory>
For whatever it's worth, here's another technique (suggested by
Eoghan) whe
we use too and which offers more control though it's more
complicated :
1. Create your own instance of MessageObserver, eg. :
public class ServletFilterMessageObserver implements
MessageObserver {
public ServletFilterMessageObserver(MessageObserver observer,
Filter
filter,
QName serviceName, QName portName) {
....
}
public void onMessage(Message message) {
HttpServletRequest req =
(HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST);
HttpServletResponse res =
(HttpServletResponse
)message.get(AbstractHTTPDestination.HTTP_RESPONSE);
filter.doFilter(req, res, new FilterChainImpl(observer,
message));
}
}
This message observer just delegates to a filter chain, or it can
chose just
write back to HttpServletResponse immediately...Note, the 'observer'
passed
to the constructor above is the usual ChainMessageObserver used by
CXF.
Now, we create the observer like this one based on certain
conditions,
here's an example :
public class ServletFilterObserverManager implements
ServerLifeCycleListener
{
public ServletFilterObserverManager(Bus bus, Map<String, String>
filterMap) {
ServerLifeCycleManager slcm =
bus.getExtension(ServerLifeCycleManager.class);
slcm.registerListener(this);
}
public void startServer(Server server) {
// if certain condition is met then....
MessageObserver observer =
server.getDestination().getMessageObserver();
if (observer == null) {
observer = new
ChainInitiationObserver(server.getEndpoint(),
bus);
}
// here's our custom observer
ServletFilterMessageObserver delegate =
new ServletFilterMessageObserver(observer, filter,
serviceQName, portQName);
server.getDestination().setMessageObserver(delegate);
}
}
}
Then register this manager as a bean, ex :
<bean name="ServletFilterObserverManager"
class="org.apache.cxf.utilities.filters.ServletFilterObserverManager">
<constructor-arg ref="cxf"/>
<constructor-arg><map/></constructor-arg>
</bean>
Cheers, Sergey
----- Original Message -----
From: "Willem Jiang" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Monday, July 21, 2008 11:14 AM
Subject: Re: AW: AW: Configure jetty to use static content
Yes, you just need to set the endpoint address with the jetty port
that
you configured.
Such as
<bean id="clientFactory"
class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass"
value="org.apache.cxf.systest.http_jetty.DummyInterface" />
<property name="address" value="http://localhost:8808/Dummy" />
</bean>
Willem
Marcus Redeker wrote:
Willem,
Thanks for that information. If I use the xml-file from svn do I
have to
do
something else the get the cxf ws-endpoints to work. It looks like
the
jetty-engine.xml file only registers ResourceHandlers?
Thanks,
--Marcus
-----Ursprüngliche Nachricht-----
Von: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Im
Auftrag von
Willem Jiang
Gesendet: Montag, 21. Juli 2008 03:55
An: [email protected]
Betreff: Re: AW: Configure jetty to use static content
Hi Marcus,
It should work. Here is a unit test[1][2] which shows how to set the
resource handler to the jetty engine.
[1]https://svn.apache.org/repos/asf/cxf/trunk/systests/src/test/java/org/apa
che/cxf/systest/http_jetty/jetty-engine.xml
[2]https://svn.apache.org/repos/asf/cxf/trunk/systests/src/test/java/org/apa
che/cxf/systest/http_jetty/EngineLifecycleTest.java
Willem
Marcus Redeker wrote:
Hi Glen,
Thanks for looking at this. When I use Spring the ResourceHandler
objekt
is created correct from spring and also the
setResourceBase() method is called with correct string. It seems
the the
<httpj:handlers> tag is not evaluated correct because
the jetty logging does not say that another handler is registered.
The java code works fine. It does not matter if I create an extra
variable or path the string by itself. I don't want to use the
java code
anyway.
To avaoid problems with the seperator I am already using the
forward
slash.
That no problem and works.
Any idea why the <httpj:handlers> tag might not work?
--Marcus
-----Ursprüngliche Nachricht-----
Von: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Im
Auftrag von
Glen Mazza
Gesendet: Sonntag, 20. Juli 2008 15:42
An: [email protected]
Betreff: Re: Configure jetty to use static content
Isn't the file divider "\" in Windows--that may be part of the
problem.
Also, some debugging appears needed here, from both ends.
Perhaps you
should System.out.println() what you are passing in via
Spring as the resourceBase value--first confirm that indeed the
Java
code is getting the "d:/temp/" from the config file. Next,
factor out that hardcoded
"d:/temp/"
from your Java code into a String variable and then
setResourceBase(myNewVar) --> does that work?
Glen
Marcus Redeker wrote:
All,
I am trying to use the spring configuration to added a
ResourceHandler
for static content to jetty.
It does not work when I use the following spring configuration:
========== Spring config ================
<httpj:engine-factory bus="cxf">
<httpj:engine port="9000">
<httpj:handlers>
<bean class="org.mortbay.jetty.handler.ResourceHandler">
<property
name="resourceBase"><value>d:/temp/</value></property>
</bean> </httpj:handlers>
</httpj:engine>
</httpj:engine-factory>
=========================
But when I use the following java code it does work:
=========== Java code ========================== Bus bus =
(Bus)ctx.getBean("cxf"); ServerRegistry sr=
bus.getExtension(ServerRegistry.class);
ServerImpl si = (ServerImpl) sr.getServers().get(0);
JettyHTTPDestination jhd = (JettyHTTPDestination)si.getDestination();
JettyHTTPServerEngine engine = (JettyHTTPServerEngine)
jhd.getEngine();
Server server = engine.getServer(); Handler
serverHandler = server.getHandler(); ContextHandlerCollection
contextHandlerCollection =
(ContextHandlerCollection)serverHandler;
HandlerList handlerList = new HandlerList(); ResourceHandler
resourceHandler = new ResourceHandler();
handlerList.addHandler(resourceHandler);
handlerList.addHandler(contextHandlerCollection);
server.setHandler(handlerList);
handlerList.start();
resourceHandler.setResourceBase("d:/temp/");
========================================
Can you guys help me? I would like to only use spring config and
not
have to have the extra java code.
Thanks,
Marcus
--
View this message in context:
http://www.nabble.com/Configure-jetty-to-use-static-content-tp18554067
p18554
593.html
Sent from the cxf-user mailing list archive at Nabble.com.
----------------------------
IONA Technologies PLC (registered in Ireland)
Registered Number: 171387
Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
Ireland