MarkLogic PojoQueryBuilder 不适用于 jboss EAP

Posted

技术标签:

【中文标题】MarkLogic PojoQueryBuilder 不适用于 jboss EAP【英文标题】:MarkLogic PojoQueryBuilder is not working with jboss EAP 【发布时间】:2016-08-09 12:40:02 【问题描述】:

我有一个使用 MarkLogic 数据库的 springboot 应用程序。我正在使用 MarkLogic JAVA 客户端 api v 3.0.1。

我有一个 PojoRepository,它适用于所有其他任务,除了使用 Jboss EAP 6.4.0 进行搜索 我尝试使用spring boot的嵌入式服务器和单独的tomcat服务器,它工作正常。我的代码片段如下:

@Override
    public List<Property> findAll() 
        List<Property> list = new ArrayList<>();
        PojoQueryBuilder<Property> qb1 = repository.getQueryBuilder();
        StructuredQueryDefinition query1 = qb1.and(
                qb1.collection(PROPERTY_COLLECTION),
                qb1.value("archived", false));
        PojoPage<Property> pg = repository.search(query1, 1);
        Iterator<Property> it = pg.iterator();
        while (it.hasNext()) 
            list.add(it.next());
        
        System.out.println("list: " + list);
        return list;

    

错误日志如下:

17:18:50,802 错误 [org.springframework.boot.context.web.ErrorPageFilter] (http-/127.0.0.1:8080-1) 由于异常 [/v1/preference_categories] 转发到错误页面 [本地消息:搜索失败:错误请求。服务器消息:REST-INVALIDPARAM:(错误:FOER0000)无效参数:无效查询结构(检查命名空间):preference_category.json]:com.marklogic.client.FailedRequestException:本地消息:搜索失败:错误请求。服务器消息:REST-INVALIDPARAM:(错误:FOER0000)无效参数:无效查询结构(检查命名空间):preference_category.json 在 com.marklogic.client.impl.JerseyServices$JerseySearchRequest.getResponse(JerseyServices.java:2206) [java-client-api-3.0.1.jar:] 在 com.marklogic.client.impl.JerseyServices.getBulkDocumentsImpl(JerseyServices.java:869) [java-client-api-3.0.1.jar:] 在 com.marklogic.client.impl.JerseyServices.getBulkDocuments(JerseyServices.java:744) [java-client-api-3.0.1.jar:] 在 com.marklogic.client.impl.DocumentManagerImpl.search(DocumentManagerImpl.java:500) [java-client-api-3.0.1.jar:] 在 com.marklogic.client.impl.JSONDocumentImpl.search(JSONDocumentImpl.java:26) [java-client-api-3.0.1.jar:] 在 com.marklogic.client.impl.PojoRepositoryImpl.search(PojoRepositoryImpl.java:340) [java-client-api-3.0.1.jar:] 在 com.marklogic.client.impl.PojoRepositoryImpl.search(PojoRepositoryImpl.java:308) [java-client-api-3.0.1.jar:] 在 com.optum.pma.service.impl.PrefereceCategoryServiceImpl.findAll(PrefereceCategoryServiceImpl.java:217) [类:] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_51] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_51] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_51] 在 java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_51] 在 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302) [spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) [spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) [spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:52) [spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) [spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) [spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 com.sun.proxy.$Proxy127.findAll(未知来源) 在 com.optum.pma.controller.PreferenceCategoryController.allPCs(PreferenceCategoryController.java:139) [类:] 在 com.optum.pma.controller.PreferenceCategoryController$$FastClassBySpringCGLIB$$19b9caad.invoke() [类:] 在 org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) [spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:718) [spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) [spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:52) [spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) [spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:654) [spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 com.optum.pma.controller.PreferenceCategoryController$$EnhancerBySpringCGLIB$$10723d75.allPCs() [类:] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_51] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_51] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_51] 在 java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_51] 在 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222) [spring-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) [spring-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) [spring-webmvc-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814) [spring-webmvc-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737) [spring-webmvc-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) [spring-webmvc-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) [spring-webmvc-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) [spring-webmvc-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) [spring-webmvc-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) [spring-webmvc-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:734) [jboss-servlet-api_3.0_spec-1.0.2.Final-redhat-2.jar:1.0.2.Final-redhat-2] 在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) [spring-webmvc-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.2.Final-redhat-2.jar:1.0.2.Final-redhat-2] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) [spring-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87) [spring-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) [spring-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) [spring-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:120) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 在 org.springframework.boot.context.web.ErrorPageFilter.access$000(ErrorPageFilter.java:61) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 在 org.springframework.boot.context.web.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:95) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] 在 org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:113) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:231) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:150) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:854) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:926) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_51]

如果有人能有出路...任何形式的建议都非常感谢... 谢谢

【问题讨论】:

【参考方案1】:

感谢大家的宝贵意见,我尝试检查 Marklogic ErrorLog 中的日志,它没有显示任何内容,我尝试通过其他方法记录重现相同的错误,但我无法做到。仅在 Jboss EAP 中,我收到错误消息:

由于异常,从请求 [/v1/preference_categories] 转发到错误页面 [本地消息:搜索失败:错误请求。服务器消息:REST-INVALIDPARAM:(错误:FOER0000) 无效参数:无效查询结构(检查命名空间):

<query xmlns:search="http://marklogic.com/appservices/search" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<collection-query>
<uri>preference_category.json</uri>
</collection-query>
</query>

但是,当我将 JAVA 客户端 API 版本从 3.0.1 更改为 3.0.5 时,它开始工作。 我不知道这个版本发布了哪些具体的 Woodstox 和 OOTB Java Stax 实现。但对我来说好处是它工作得很好。如果我发现了一些具体的东西,我会在这里发布。

谢谢。

【讨论】:

【参考方案2】:

我的猜测是与 ML Java 客户端 API 使用的 Jersey 库有一些版本冲突,我假设 JBoss 也会打包。但是很难用那个错误信息说。

我会尝试调试的东西 - 查看发送到 MarkLogic 的有效负载,看看是否有问题;检查 MarkLogic ErrorLog.txt 以获取更多信息;在最坏的情况下,将一些 xdmp:log 语句添加到 MarkLogic 中包含的 REST API 代码中,以在尝试搜索之前记录 MarkLogic 接收到的内容。任何用于查看 HTTP 流量的工具在这里也应该有所帮助。

也检查 JBoss 的类路径,看看它是否使用特定版本的 Jersey。您可以尝试使用 Java 客户端 API 和该版本的 Jersey 的简单主程序,看看它是否工作或是否重现错误。这是另一种尝试的技术 - 尝试使用反映 JBoss 使用的类路径在 JBoss 之外重现错误。

【讨论】:

我同意@rjrudin。我会在类路径上寻找 Woodstox。我们发现 Woodstox 实现 Stax API 的几种方式与我们预期的代码不同,因此我们必须找到适用于 Woodstox 和 OOTB Java Stax 实现的变通方法。这些修复程序在 Java Client API 3.0.5 中提供。您是否尝试过使用最新版本? 就@rjrudin 关于查看HTTP 流量的建议而言,我同意——这就是我要排除故障的方式。我只是在代码的早期添加了这个,然后我看到完整的 HTTP 详细信息出现在标准输出或日志中(取决于日志记录的配置方式): System.setProperty("org.apache.commons.logging.simplelog.log.org .apache.http.wire", "调试");

以上是关于MarkLogic PojoQueryBuilder 不适用于 jboss EAP的主要内容,如果未能解决你的问题,请参考以下文章

MarkLogic 8 - 按路径索引排序

Marklogic - 无效的实体引用问题

使用 MarkLogic 的 REST API 设置文档权限

如何检查用户是不是能够在 marklogic 数据库中更新或插入文档?

MarkLogic 8 和服务器端 JavaScript - 调试支持

Marklogic Json Xquery 无法查询