error pulling a model resource using projects.resources.url

77 views
Skip to first unread message

Edward Bailey

unread,
Feb 3, 2011, 3:21:54 PM2/3/11
to rundeck...@googlegroups.com
I am trying to pull a model resource remotely and getting the following error

Request: /run
Message: Error on line 1 of document : Document is invalid: no grammar found. Nested exception: Document is invalid: no grammar found.
Caused by: Executing action [nodes] of controller [FrameworkController] caused exception: com.dtolabs.shared.resources.ResourceXMLParserException: org.dom4j.DocumentException: Error on line 1 of document : Document is invalid: no grammar found. Nested exception: Document is invalid: no grammar found.
Class: FrameworkController
At Line: [94]
Code Snippet:

Stack Trace

org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Executing action [nodes] of controller [FrameworkController]  caused exception: com.dtolabs.shared.resources.ResourceXMLParserException: org.dom4j.DocumentException: Error on line 1 of document  : Document is invalid: no grammar found. Nested exception: Document is invalid: no grammar found.
at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.executeAction(SimpleGrailsControllerHelper.java:250)
at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.handleURI(SimpleGrailsControllerHelper.java:202)
at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.handleURI(SimpleGrailsControllerHelper.java:137)
at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController.handleRequest(SimpleGrailsController.java:88)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch(GrailsDispatcherServlet.java:255)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
at org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingInfo(WebUtils.java:301)
at org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingInfo(WebUtils.java:277)
at org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingInfo(WebUtils.java:269)
at org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.doFilterInternal(UrlMappingsFilter.java:187)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.obtainContent(GrailsPageFilter.java:249)
at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.doFilter(GrailsPageFilter.java:140)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:65)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:66)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:536)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:915)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405)
at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)


Here is the output of my document using curl


[automate@xxxxxxxxxxx etc]$ curl http://admin:xxxxxxxxxx@xxxxxxxxxxxx:8080/zport/dmd/Systems/Batch/getMyDeviceList
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project PUBLIC "-//DTO Labs Inc.//DTD Resources Document 1.0//EN" "project.dtd">
<project>
<node type="Node" name="xxxxxxxxxxx" username="automate" osFamily="unix" osName="Linux" hostname="xxxxxxxxxxx" />
<node type="Node" name="xxxxxxxxxxx" username="automate" osFamily="unix" osName="Linux" hostname="xxxxxxxxxxx" />
<node type="Node" name="xxxxxxxxxxx" username="automate" osFamily="unix" osName="Linux" hostname="xxxxxxxxxxx" />
<node type="Node" name="xxxxxxxxxxx" username="automate" osFamily="unix" osName="Linux" hostname="xxxxxxxxxxx" />
<node type="Node" name="xxxxxxxxxxx" username="automate" osFamily="unix" osName="Linux" hostname="xxxxxxxxxxx" />
<node type="Node" name="xxxxxxxxxxx" username="automate" osFamily="unix" osName="Linux" hostname="xxxxxxxxxxx" />
<node type="Node" name="xxxxxxxxxxx" username="automate" osFamily="unix" osName="Linux" hostname="xxxxxxxxxxx" />
<node type="Node" name="xxxxxxxxxxx" username="automate" osFamily="unix" osName="Linux" hostname="xxxxxxxxxxx" />
<node type="Node" name="xxxxxxxxxxx" username="automate" osFamily="unix" osName="Linux" hostname="xxxxxxxxxxx" />
<node type="Node" name="xxxxxxxxxxx" username="automate" osFamily="unix" osName="Linux" hostname="xxxxxxxxxxx" />
</project>

Any ideas?

Thanks

ed

Greg Schueler

unread,
Feb 3, 2011, 3:39:11 PM2/3/11
to rundeck...@googlegroups.com
Hi Edward,

It looks to me like the resources file was stored to disk from the remote URL, but whatever file is on disk is not valid.  Can you check the resource.xml file for the project and verify it is correct?  it should be at RUNDECK_BASE/projects/NAME/etc/resources.xml

Alex-SF

unread,
Feb 3, 2011, 3:42:21 PM2/3/11
to rundeck-discuss
Also, make sure the file stored locally to the Rundeck server has the
DTD declaration, too.

On Feb 3, 12:39 pm, Greg Schueler <g...@controltier.com> wrote:
> Hi Edward,
>
> It looks to me like the resources file was stored to disk from the remote
> URL, but whatever file is on disk is not valid.  Can you check the
> resource.xml file for the project and verify it is correct?  it should be at
> RUNDECK_BASE/projects/NAME/etc/resources.xml
>
> On Thu, Feb 3, 2011 at 12:21 PM, Edward Bailey <
>
>
>
> eds.mailing.list.acco...@gmail.com> wrote:
> > I am trying to pull a model resource remotely and getting the following
> > error
>
> > *Request:* /run
> > *Message:* Error on line 1 of document : Document is invalid: no grammar
> > found. Nested exception: Document is invalid: no grammar found.
> > *Caused by:* Executing action [nodes] of controller [FrameworkController]
> > caused exception: com.dtolabs.shared.resources.ResourceXMLParserException:
> > org.dom4j.DocumentException: Error on line 1 of document : Document is
> > invalid: no grammar found. Nested exception: Document is invalid: no grammar
> > found.
> > *Class:* FrameworkController
> > *At Line:* [94]
> > *Code Snippet:*
> >   Stack Trace
>
> > org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionEx ception: Executing action [nodes] of controller [FrameworkController]  caused exception: com.dtolabs.shared.resources.ResourceXMLParserException: org.dom4j.DocumentException: Error on line 1 of document  : Document is invalid: no grammar found. Nested exception: Document is invalid: no grammar found.
>
> >    at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.exe cuteAction(SimpleGrailsControllerHelper.java:250)
> >    at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.han dleURI(SimpleGrailsControllerHelper.java:202)
>
> >    at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.han dleURI(SimpleGrailsControllerHelper.java:137)
> >    at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController.handleReq uest(SimpleGrailsController.java:88)
>
> >    at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(S impleControllerHandlerAdapter.java:48)
> >    at org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch(G railsDispatcherServlet.java:255)
>
> >    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServl et.java:716)
> >    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkSe rvlet.java:647)
> >    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.jav a:552)
>
> >    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
> >    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
> >    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
> >    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandle r.java:1166)
>
> >    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequest Filter.java:70)
> >    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandle r.java:1157)
> >    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequest Filter.java:70)
>
> >    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandle r.java:1157)
> >    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequest Filter.java:70)
> >    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandle r.java:1157)
> >    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandle r.java:1157)
>
> >    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
> >    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
> >    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
>
> >    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
> >    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
> >    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>
> >    at org.mortbay.jetty.Server.handle(Server.java:326)
> >    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:536)
> >    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnecti on.java:915)
>
> >    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539)
> >    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
> >    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405)
> >    at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:2 28)
>
> >         at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:58 2)
>
> > Here is the output of my document using curl
>
> > [automate@xxxxxxxxxxx etc]$ curlhttp://admin:xxxxxxxxxx@xxxxxxxxxxxx:8080/zport/dmd/Systems/Batch/get...

Greg Schueler

unread,
Feb 3, 2011, 3:52:38 PM2/3/11
to rundeck...@googlegroups.com
Yes, i tested removing the dtd from a resources.xml file and this produces that exact error.

We have discussed removing the DTD declaration requirement, and I think we are in agreement that it should not be there. 

Edward Bailey

unread,
Feb 3, 2011, 3:46:42 PM2/3/11
to rundeck...@googlegroups.com
Ok - now I understand. The problem is that rundeck can't pull the information in same manner that curl can using username:password. The source of the error is zope complaining about the lack of authentication. The contents of the error page are being written to resource.xml and that is the source of the error message. I guess I need to make a wrapper that pulls the info to the file system and then point rundeck at that file.

Thanks for your everyone's help

Ed

Alex-SF

unread,
Feb 3, 2011, 4:03:47 PM2/3/11
to rundeck-discuss
We could add the feature to embed user/pass into the
project.resources.url property for basic auth cases like you are
using.

On Feb 3, 12:46 pm, Edward Bailey <eds.mailing.list.acco...@gmail.com>
wrote:
> ...
>
> read more »

Ed

unread,
Feb 4, 2011, 7:18:53 AM2/4/11
to rundeck-discuss
Adding the ability to use a username/password would be great. I am
guessing a number of network management tools that might be a source
of information for rundeck would require some sort of authentication.
Would the authentication options present in curl work? If so then curl
would be a easy way to debug/test the setup of the model resource.

Thanks

Ed
> ...
>
> read more »

Alex-SF

unread,
Feb 10, 2011, 10:53:28 AM2/10/11
to rundeck-discuss
A simple solution would be to support a configuration like:

framework.resources.url = http://user:pass@somehost/resources.xml

It's not secure since the password is in clear text but would be
trivial to implement.
> ...
>
> read more »

Ed

unread,
Feb 10, 2011, 8:49:24 PM2/10/11
to rundeck-discuss
Fine with me - the account I would use would be the equivalent of a
guest account so security would not be huge issue.

On Feb 10, 10:53 am, Alex-SF <aho...@users.sourceforge.net> wrote:
> A simple solution would be to support a configuration like:
>
>       framework.resources.url =http://user:pass@somehost/resources.xml
> ...
>
> read more »

Alex-SF

unread,
Feb 14, 2011, 12:59:36 PM2/14/11
to rundeck-discuss
Would you do us the honors and log this request?
http://rundeck.lighthouseapp.com/projects/59277-development/overview

Thanks
> ...
>
> read more »
Reply all
Reply to author
Forward
0 new messages