IQSS / dataverse

Open source research data repository software
http://dataverse.org
Other
873 stars 484 forks source link

Streaming exports and OAI_ORE and datacite exporters #5043

Closed qqmyers closed 5 years ago

qqmyers commented 5 years ago

As part of #4706, I created a class to create an json-ld OAI-ORE map file and added it as one of the metadata export options. I also created a minimal datacite.xml exporter that simple replicates what was being sent to DataCite. In doing this, since OAI_ORE maps can get large, I switched the export mechanism to stream responses.

(I'm aware of #3697, #4257, etc. but am not quite sure of their status. My guess is that the export from that effort could replace this one (as an export, and possible w.r.t. what is sent to DataCite, and what's included in the RDA-compliant Bag sent to DPN) once it's merged.)

jggautier commented 5 years ago

Hi @qqmyers. Is there any documentation I could look at for how Dataverse metadata is being mapped to the json-ld OAI-ORE map file?

qqmyers commented 5 years ago

@jggautier - sorry for being slow. An updated citations.tsv file is not yet in the PR and I need to do some work since QDR has added/deleted fields relative to the base version. As is, the code does generate custom URIs that follow the tsv file/field name hierarchy so there's always a default. And the PR includes the update that allows an extra columns to be added to specify an namespace for the whole tsv and/or to assign individual URIs to fields (I can send an example if you want to test this part). I'll get an updated citations.tsv to you when I can, but I don't have a strong preference for what the URIs are so if you want to specify some/all before then, feel free.

qqmyers commented 5 years ago

@jggautier - Draft mappings to community vocabularies are now in citations.tsv - the last column if the exist. Other terms in citations.tsv will be defined as "https://dataverse.org/schema/<name from column 1> due to the last column in the metadatablock row. Terms in any other tsv file currently default to <instance base URL>/schema/<tsv name>/<any parent field name>/<name>, but, as with citations.tsv, they can be assigned a namespace. Internal terms, i.e. ones that come from the dataverse software classes themselves are defined in src/main/java/edu/harvard/iq/dataverse/util/json/JsonLDTerm.java - all within the https://dataverse.org/schema/ namespace for now.

In general, I don't have strong preferences for any of these mappings and changing them, or dropping them (so they become dataverse.org/schema terms) would be fine by me. The ones I did assign seem like fairly close matches, but often, while there were similar terms, the expected values were not necessarily the same (text versus structured), or the structure was different (e.g. Dublin core has description, but there's no indication that multiple descriptions with value and date fields are expected). A group discussion might find consensus on some of these but I'd suggest just dropping any mappings that raise concerns for now - using dataverse.org specific terms and allowing instances to map via tsv file changes.

jggautier commented 5 years ago

@qqmyers. Thanks for the info! I took a look at the mappings in the citation.tsv file and @scolapasta is looking at it, too.

Creating a dataverse.org namespace for dataverse fields, and mapping those fields to fields in other vocabularies (like dublin core and schema.org) seems like a requirement for the json-ld OAI-ORE map file, but not the focus of your work to archive published datasets in DPN. So I don't want to hold up this PR with mapping suggestions that could be made later.

You wrote that terms in any other tsv file currently default to /schema///. Does that mean they default to dataverse.org/schema terms as well? (I haven't had a chance yet to see what the json-ld OAI-ORE map file that this PR will create looks like.) Thanks again!

qqmyers commented 5 years ago

@jggautier - the link with the DPN/Bagit part is that the OREmap file is submitted as part of the Bag, so it would be nice to have 'reasonable' mappings for a v1, even if they get updated later.

For the other tsv files - I should have read my comment :-) My bracketed terms got dropped to create /schema///, but take a look at the edited comment above now to see the form of the default term names for any/all other blocks. I did create some example files early on posted on a wiki page - I'll see if I can update them so they match the latest code and then provide a link here.

jggautier commented 5 years ago

Ah I understand the comment now. Thanks!

So in the citation.tsv, does a metadata field have its own URI in the dataverse.org schema if there is also a URI in either of the last two columns?

qqmyers commented 5 years ago

The order of precedence is: a field's URI is

Note - I updated the citation.tsv file in the pull since I didn't have the block name in the MDblock URI. It would be good for all standard .tsvs from Dataverse to at least have the MDblock URI set so that the terms are standard (i.e. start with http://dataverse.org/schema/) - if nothing is set the default generates URIs starting with the local instance name (thought this would be useful if sites customize the term definitions - they can remove or change the md block uri to no longer use the dataverse term).

jggautier commented 5 years ago

Ah, okay. Everything makes sense to me so far. I'll take myself off review. Thanks again!

qqmyers commented 5 years ago

I committed a couple bug fixes and did some refactoring for the bagit generation /dpn PR. I also updated https://github.com/QualitativeDataRepository/dataverse/wiki/Data-and-Metadata-Packaging-for-Archiving with links to updated example files (oai-ore.jsonld map, bag and datacite.xml). The oai-ore file should reflect the current code and show the basics of how terms are defined. However, this is based on QDR's version of citation.tsv which has a few differences (some geospatial fields and terms such as the description date that no longer show in the GUI and have a different label).

jggautier commented 5 years ago

Thanks a lot for all of this great documentation!

jggautier commented 5 years ago

Hi, @qqmyers. @scolapasta and I had a question about the last two columns in the metadata block TSVs. It looks like the first column has the URI, unless the field is a child field of a compound field; for those fields, like author name or author affiliation, the URI is in the second column.

Would it be possible to use just one column? It doesn't seem like there would be cases where both columns have URIs for one field.

qqmyers commented 5 years ago

@jggautier @scolapasta - sorry - just typos. There should only be one additional column for the fields. I updated the citation.tsv file in the commit (and added a header for the column added in the metadatablock and the 1 column for specific fields).

kcondon commented 5 years ago

@qqmyers Can you update this branch from develop? Version numbers have changed and I can't build and deploy. Thanks!

qqmyers commented 5 years ago

@kcondon - merged...

kcondon commented 5 years ago

@qqmyers Thanks. Have applied db update and tsv file. When I click on an existing dataset or try to publish a new one I see 500 errors and associated server log errors:

[2018-10-10T18:09:36.650-0400] [glassfish 4.1] [WARNING] [] [edu.harvard.iq.dataverse.util.BundleUtil] [tid: _ThreadID=53 _ThreadName=jk-connector(4)] [timeMillis: 1539209376650] [levelValue: 900] [[ Could not find key "dataset.exportBtn.itemLabel.datacite" in bundle file.]]

[2018-10-10T18:09:36.651-0400] [glassfish 4.1] [SEVERE] [] [javax.enterprise.resource.webcontainer.jsf.application] [tid: _ThreadID=53 _ThreadName=jk-connector(4)] [timeMillis: 1539209376651] [levelValue: 1000] [[ Error Rendering View[/dataset.xhtml] javax.el.ELException: /dataset.xhtml @603,104 value="#{DatasetPage.exporters}": java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key dataset.exportBtn.itemLabel.oai_ore at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114) at com.sun.faces.facelets.component.UIRepeat.getValue(UIRepeat.java:279) at com.sun.faces.facelets.component.UIRepeat.getDataModel(UIRepeat.java:255) at com.sun.faces.facelets.component.UIRepeat.setIndex(UIRepeat.java:523) at com.sun.faces.facelets.component.UIRepeat.process(UIRepeat.java:577) at com.sun.faces.facelets.component.UIRepeat.encodeChildren(UIRepeat.java:1110) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304) at com.sun.faces.renderkit.html_basic.PassthroughRenderer.encodeChildren(PassthroughRenderer.java:104) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304) at com.sun.faces.renderkit.html_basic.PassthroughRenderer.encodeChildren(PassthroughRenderer.java:104) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) at org.primefaces.component.tabview.TabViewRenderer.encodeTabContent(TabViewRenderer.java:334) at org.primefaces.component.tabview.TabViewRenderer.encodeContents(TabViewRenderer.java:290) at org.primefaces.component.tabview.TabViewRenderer.encodeMarkup(TabViewRenderer.java:134) at org.primefaces.component.tabview.TabViewRenderer.encodeEnd(TabViewRenderer.java:73) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312) at com.sun.faces.renderkit.html_basic.PassthroughRenderer.encodeChildren(PassthroughRenderer.java:104) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) at javax.faces.render.Renderer.encodeChildren(Renderer.java:176) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) at org.ocpsoft.rewrite.faces.RewriteViewHandler.renderView(RewriteViewHandler.java:196) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:295) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:226) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:412) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282) at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) at java.lang.Thread.run(Thread.java:748) Caused by: javax.el.ELException: java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key dataset.exportBtn.itemLabel.oai_ore at javax.el.BeanELResolver.getValue(BeanELResolver.java:368) at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) at com.sun.el.parser.AstValue.getValue(AstValue.java:140) at com.sun.el.parser.AstValue.getValue(AstValue.java:204) at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226) at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50) at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) ... 74 more Caused by: java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key dataset.exportBtn.itemLabel.oai_ore at java.util.ResourceBundle.getObject(ResourceBundle.java:450) at java.util.ResourceBundle.getString(ResourceBundle.java:407) at edu.harvard.iq.dataverse.export.OAI_OREExporter.getDisplayName(OAI_OREExporter.java:41) at edu.harvard.iq.dataverse.export.ExportService.getExportersLabels(ExportService.java:80) at edu.harvard.iq.dataverse.DatasetPage.getExporters(DatasetPage.java:3261) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at javax.el.BeanELResolver.getValue(BeanELResolver.java:363) ... 81 more ]]

and:

[2018-10-10T18:12:00.192-0400] [glassfish 4.1] [SEVERE] [] [edu.harvard.iq.dataverse.export.OAI_OREExporter] [tid: _ThreadID=50 _ThreadName=jk-connector(1)] [timeMillis: 1539209520192] [levelValue: 1000] [[ Can't find resource for bundle java.util.PropertyResourceBundle, key institution.name]]

[2018-10-10T18:12:00.194-0400] [glassfish 4.1] [SEVERE] [] [] [tid: _ThreadID=50 _ThreadName=Thread-9] [timeMillis: 1539209520194] [levelValue: 1000] [[ java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key institution.name at java.util.ResourceBundle.getObject(ResourceBundle.java:450) at java.util.ResourceBundle.getString(ResourceBundle.java:407) at edu.harvard.iq.dataverse.util.bagit.OREMap.getOREMap(OREMap.java:241) at edu.harvard.iq.dataverse.util.bagit.OREMap.writeOREMap(OREMap.java:44) at edu.harvard.iq.dataverse.export.OAI_OREExporter.exportDataset(OAI_OREExporter.java:26) at edu.harvard.iq.dataverse.export.ExportService.cacheExport(ExportService.java:267) at edu.harvard.iq.dataverse.export.ExportService.exportAllFormats(ExportService.java:165) at edu.harvard.iq.dataverse.engine.command.impl.FinalizeDatasetPublicationCommand.exportMetadata(FinalizeDatasetPublicationCommand.java:163) at edu.harvard.iq.dataverse.engine.command.impl.FinalizeDatasetPublicationCommand.execute(FinalizeDatasetPublicationCommand.java:125) at edu.harvard.iq.dataverse.engine.command.impl.FinalizeDatasetPublicationCommand.execute(FinalizeDatasetPublicationCommand.java:39) at edu.harvard.iq.dataverse.EjbDataverseEngine.submit(EjbDataverseEngine.java:223) at edu.harvard.iq.dataverse.EjbDataverseEngine$1$1.submit(EjbDataverseEngine.java:405) at edu.harvard.iq.dataverse.engine.command.impl.PublishDatasetCommand.execute(PublishDatasetCommand.java:128) at edu.harvard.iq.dataverse.engine.command.impl.PublishDatasetCommand.execute(PublishDatasetCommand.java:31) at edu.harvard.iq.dataverse.EjbDataverseEngine.submit(EjbDataverseEngine.java:223) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081) at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153) at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4786) at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:656) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608) at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:64) at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52) at sun.reflect.GeneratedMethodAccessor122.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608) at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163) at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140) at sun.reflect.GeneratedMethodAccessor121.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369) at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4758) at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4746) at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212) at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88) at com.sun.proxy.$Proxy332.submit(Unknown Source) at edu.harvard.iq.dataverse.EJB31_GeneratedEjbDataverseEngineIntf__Bean.submit(Unknown Source) at edu.harvard.iq.dataverse.DatasetPage.releaseDataset(DatasetPage.java:1931) at edu.harvard.iq.dataverse.DatasetPage.releaseDataset(DatasetPage.java:1831) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.el.parser.AstValue.invoke(AstValue.java:289) at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304) at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40) at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) at javax.faces.component.UICommand.broadcast(UICommand.java:315) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931) at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:295) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:226) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:412) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282) at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) at org.glass]]

kcondon commented 5 years ago

@qqmyers I am out tomorrow but will be in Friday to continue testing your 3 prs.

qqmyers commented 5 years ago

@kcondon -added the missing Bundle properties.