Dear XNAT community,
we, Max Plack institute Berlin, want to set up XNAT for our research data and try to figure out how to define our own XSD Schemas. We understood, that custom XSD schemata should extend the schema xnat:subjectAssessorData. As a starting point we defined the following XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xnat="http://nrg.wustl.edu/xnat" xmlns:xyz="http://nrg.wustl.edu/xnat_myData" targetNamespace="http://nrg.wustl.edu/xnat_myData" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:import namespace="http://nrg.wustl.edu/xnat" schemaLocation="../xnat/xnat.xsd"/>
<xs:element name="MyAssessment" type="xyz:myAssessorData"/>
<xs:complexType name="myAssessorData">
<xs:complexContent>
<xs:extension base="xnat:subjectAssessorData">
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
We added this line to the InstanceSettings.xml:
<Data_Model File_Name="myData.xsd" File_Location="%XDAT_PROJECT%/schemas/myData" DB="%DB_NAME%"/>
As admin we set it up as additional data type using the web interface. After logging out and in again we can choose the MyAssessment from experiments selection.
The problem is, that we get the following error on submit:
Note, that we did not fill out any other fields than “Experiment ID in this project“. We get more detailed information on this error in the log files, xdat.log and sql.log. xdat.log points to Position: 5619 of the sql statement. We highlighted what we think is the position 5619 in the logged sql statement found in sql.log.
Xdat.log:
2016-06-14 12:13:51,749 [http-bio-8080-exec-7] ERROR org.nrg.xft.XFTItem -
org.postgresql.util.PSQLException: ERROR: relation "xyz_myassessordata" does not exist Position: 5619 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254) at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208) at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208) at org.nrg.xft.db.PoolDBUtils.executeQuery(PoolDBUtils.java:867) at org.nrg.xft.db.PoolDBUtils.executeSelectQuery(PoolDBUtils.java:402) at org.nrg.xft.search.TableSearch.Execute(TableSearch.java:106) at org.nrg.xft.search.ItemSearch.execute(ItemSearch.java:181) at org.nrg.xft.search.ItemSearch.exec(ItemSearch.java:423) at org.nrg.xft.search.ItemSearch.exec(ItemSearch.java:117) at org.nrg.xft.XFTItem.getCurrentDBVersion(XFTItem.java:6071) at org.nrg.xft.XFTItem.getCurrentDBVersion(XFTItem.java:6055) at org.nrg.xnat.turbine.modules.actions.ModifySubjectAssessorData.doPerform(ModifySubjectAssessorData.java:76) at org.apache.turbine.modules.actions.VelocityAction.doPerform(VelocityAction.java:46) at org.apache.turbine.util.velocity.VelocityActionEvent.perform(VelocityActionEvent.java:82) at org.apache.turbine.modules.actions.VelocityAction.perform(VelocityAction.java:72) at org.apache.turbine.modules.actions.VelocitySecureAction.perform(VelocitySecureAction.java:61) at org.apache.turbine.modules.ActionLoader.exec(ActionLoader.java:96) at org.apache.turbine.modules.pages.DefaultPage.doBuild(DefaultPage.java:113) at org.apache.turbine.modules.Page.build(Page.java:53) at org.apache.turbine.modules.PageLoader.exec(PageLoader.java:98) at org.apache.turbine.Turbine.doGet(Turbine.java:751) at org.apache.turbine.Turbine.doPost(Turbine.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:163) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:206) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:179) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.nrg.xnat.restlet.util.UpdateExpirationCookie.doFilter(UpdateExpirationCookie.java:38) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:369) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.nrg.xnat.security.XnatArcSpecFilter.doFilter(XnatArcSpecFilter.java:40) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.nrg.xnat.security.XnatBasicAuthenticationFilter.doFilter(XnatBasicAuthenticationFilter.java:134) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.nrg.xnat.security.XnatExpiredPasswordFilter.doFilter(XnatExpiredPasswordFilter.java:177) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.springframework.security.web.access.channel.ChannelProcessingFilter.doFilter(ChannelProcessingFilter.java:109) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:168) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)2016-06-14 12:13:51,896 [http-bio-8080-exec-7] ERROR org.nrg.xft.db.DBAction - Error saving item: <XFTItem name="xyz:myAssessorData"> <id>XNAT_TEST_IMPORT_E00003</id> <subjectassessordata_subjectassessordata> <XFTItem name="xnat:subjectAssessorData"> <id>XNAT_TEST_IMPORT_E00003</id> <subject_id>XNAT_TEST_IMPORT_S00002</subject_id> <subjectassessordata_info>19</subjectassessordata_info> <experimentdata_experimentdata> <XFTItem name="xnat:experimentData"> <experimentdata_info>19</experimentdata_info> <extension>22</extension> <id>XNAT_TEST_IMPORT_E00003</id> <label>1</label> <project>111</project> <experimentdata_info_experimentdata_meta_data> <XFTItem name="xnat:experimentData_meta_data"> <activation_date>Tue Jun 14 12:13:51 CEST 2016</activation_date> <activation_user_xdat_user_id>1</activation_user_xdat_user_id> <insert_date>Tue Jun 14 12:13:51 CEST 2016</insert_date> <insert_user_xdat_user_id>1</insert_user_xdat_user_id> <meta_data_id>19</meta_data_id> <modified>0</modified> <row_last_modified>Tue Jun 14 12:13:51 CEST 2016</row_last_modified> <shareable>1</shareable> <status>active</status> <xft_version>305</xft_version> </XFTItem> </experimentdata_info_experimentdata_meta_data> <extension_meta_element> <XFTItem name="xdat:meta_element"> <element_name>xyz:myAssessorData</element_name> <xdat_meta_element_id>22</xdat_meta_element_id> </XFTItem> </extension_meta_element> </XFTItem> </experimentdata_experimentdata> <subjectassessordata_info_subjectassessordata_meta_data> <XFTItem name="xnat:subjectAssessorData_meta_data"> <activation_date>Tue Jun 14 12:13:51 CEST 2016</activation_date> <activation_user_xdat_user_id>1</activation_user_xdat_user_id> <insert_date>Tue Jun 14 12:13:51 CEST 2016</insert_date> <insert_user_xdat_user_id>1</insert_user_xdat_user_id> <meta_data_id>19</meta_data_id> <modified>0</modified> <row_last_modified>Tue Jun 14 12:13:51 CEST 2016</row_last_modified> <shareable>1</shareable> <status>active</status> <xft_version>305</xft_version> </XFTItem> </subjectassessordata_info_subjectassessordata_meta_data> </XFTItem> </subjectassessordata_subjectassessordata></XFTItem>
sql.log:
2016-06-14 12:13:51,749 - SELECT table1.id AS xyz_myAssessorData0, xyz_myAssessorData.myassessordata_info AS xyz_myAssessorData1, table0.subject_id AS xnat_subjectAssessorData3, table0.age AS xnat_subjectAssessorData4, table0.subjectassessordata_info AS xnat_subjectAssessorData5, table1.date AS xnat_experimentData6, table1.time AS xnat_experimentData7, table1.duration AS xnat_experimentData8, table1.delay AS xnat_experimentData9, table1.delay_ref_expt_id AS xnat_experimentData10, table1.note AS xnat_experimentData11, table1.investigator_xnat_investigatordata_id AS xnat_experimentData12, table1.validation_xnat_validationdata_id AS xnat_experimentData13, table1.acquisition_site AS xnat_experimentData14, table1.project AS xnat_experimentData16, table1.visit_id AS xnat_experimentData17, table1.visit AS xnat_experimentData18, table1.version AS xnat_experimentData19, table1.original AS xnat_experimentData20, table1.protocol AS xnat_experimentData21, table1.label AS xnat_experimentData22, table1.extension AS xnat_experimentData23, table1.experimentdata_info AS xnat_experimentData24, table3.title AS xnat_investigatorData45, table3.firstname AS xnat_investigatorData46, table3.lastname AS xnat_investigatorData47, table3.institution AS xnat_investigatorData48, table3.department AS xnat_investigatorData49, table3.email AS xnat_investigatorData50, table3.phone AS xnat_investigatorData51, table3.id AS xnat_investigatorData52, table3.investigatordata_info AS xnat_investigatorData53, table3.xnat_investigatordata_id AS xnat_investigatorData54, table4.xft_version AS xnat_investigatorData_meta_data55, table4.last_modified AS xnat_investigatorData_meta_data56, table4.status AS xnat_investigatorData_meta_data57, table4.activation_date AS xnat_investigatorData_meta_data58, table4.row_last_modified AS xnat_investigatorData_meta_data59, table4.insert_date AS xnat_investigatorData_meta_data60, table4.activation_user_xdat_user_id AS xnat_investigatorData_meta_data61, table4.insert_user_xdat_user_id AS xnat_investigatorData_meta_data62, table4.origin AS xnat_investigatorData_meta_data63, table4.modified AS xnat_investigatorData_meta_data64, table4.shareable AS xnat_investigatorData_meta_data65, table4.meta_data_id AS xnat_investigatorData_meta_data66, table5.method AS xnat_validationData67, table5.date AS xnat_validationData68, table5.notes AS xnat_validationData69, table5.validated_by AS xnat_validationData70, table5.status AS xnat_validationData71, table5.validationdata_info AS xnat_validationData72, table5.xnat_validationdata_id AS xnat_validationData73, table6.xft_version AS xnat_validationData_meta_data74, table6.last_modified AS xnat_validationData_meta_data75, table6.status AS xnat_validationData_meta_data76, table6.activation_date AS xnat_validationData_meta_data77, table6.row_last_modified AS xnat_validationData_meta_data78, table6.insert_date AS xnat_validationData_meta_data79, table6.activation_user_xdat_user_id AS xnat_validationData_meta_data80, table6.insert_user_xdat_user_id AS xnat_validationData_meta_data81, table6.origin AS xnat_validationData_meta_data82, table6.modified AS xnat_validationData_meta_data83, table6.shareable AS xnat_validationData_meta_data84, table6.meta_data_id AS xnat_validationData_meta_data85, table7.element_name AS xdat_meta_element142, table7.xdat_meta_element_id AS xdat_meta_element143, table8.xft_version AS xnat_experimentData_meta_data144, table8.last_modified AS xnat_experimentData_meta_data145, table8.status AS xnat_experimentData_meta_data146, table8.activation_date AS xnat_experimentData_meta_data147, table8.row_last_modified AS xnat_experimentData_meta_data148, table8.insert_date AS xnat_experimentData_meta_data149, table8.activation_user_xdat_user_id AS xnat_experimentData_meta_data150, table8.insert_user_xdat_user_id AS xnat_experimentData_meta_data151, table8.origin AS xnat_experimentData_meta_data152, table8.modified AS xnat_experimentData_meta_data153, table8.shareable AS xnat_experimentData_meta_data154, table8.meta_data_id AS xnat_experimentData_meta_data155, table9.xft_version AS xnat_subjectAssessorData_meta_data156, table9.last_modified AS xnat_subjectAssessorData_meta_data157, table9.status AS xnat_subjectAssessorData_meta_data158, table9.activation_date AS xnat_subjectAssessorData_meta_data159, table9.row_last_modified AS xnat_subjectAssessorData_meta_data160, table9.insert_date AS xnat_subjectAssessorData_meta_data161, table9.activation_user_xdat_user_id AS xnat_subjectAssessorData_meta_data162, table9.insert_user_xdat_user_id AS xnat_subjectAssessorData_meta_data163, table9.origin AS xnat_subjectAssessorData_meta_data164, table9.modified AS xnat_subjectAssessorData_meta_data165, table9.shareable AS xnat_subjectAssessorData_meta_data166, table9.meta_data_id AS xnat_subjectAssessorData_meta_data167, table10.xft_version AS xyz_myAssessorData_meta_data168, table10.last_modified AS xyz_myAssessorData_meta_data169, table10.status AS xyz_myAssessorData_meta_data170, table10.activation_date AS xyz_myAssessorData_meta_data171, table10.row_last_modified AS xyz_myAssessorData_meta_data172, table10.insert_date AS xyz_myAssessorData_meta_data173, table10.activation_user_xdat_user_id AS xyz_myAssessorData_meta_data174, table10.insert_user_xdat_user_id AS xyz_myAssessorData_meta_data175, table10.origin AS xyz_myAssessorData_meta_data176, table10.modified AS xyz_myAssessorData_meta_data177, table10.shareable AS xyz_myAssessorData_meta_data178, table10.meta_data_id AS xyz_myAssessorData_meta_data179 FROM (SELECT SEARCH.* FROM (SELECT DISTINCT ON (xyz_myAssessorData0) * FROM (SELECT table1.id AS xyz_myAssessorData0 FROM xyz_myAssessorData xyz_myAssessorData LEFT JOIN xnat_subjectAssessorData table0 ON xyz_myAssessorData.id=table0.id LEFT JOIN xnat_experimentData table1 ON table0.id=table1.id) SECURITY WHERE
(
(xyz_myAssessorData0 IS NULL OR xyz_myAssessorData0='') AND
(xyz_myAssessorData0 IS NULL OR xyz_myAssessorData0=''))) SECURITY LEFT JOIN xyz_myAssessorData SEARCH ON SECURITY.xyz_myAssessorData0=SEARCH.id) xyz_myAssessorData LEFT JOIN xnat_subjectAssessorData table0 ON xyz_myAssessorData.id=table0.id LEFT JOIN xnat_experimentData table1 ON table0.id=table1.id LEFT JOIN xnat_investigatorData table3 ON table1.investigator_xnat_investigatordata_id=table3.xnat_investigatordata_id LEFT JOIN xnat_investigatorData_meta_data table4 ON table3.investigatorData_info=table4.meta_data_id LEFT JOIN xnat_validationData table5 ON table1.validation_xnat_validationdata_id=table5.xnat_validationdata_id LEFT JOIN xnat_validationData_meta_data table6 ON table5.validationData_info=table6.meta_data_id LEFT JOIN xdat_meta_element table7 ON table1.extension=table7.xdat_meta_element_id LEFT JOIN xnat_experimentData_meta_data table8 ON table1.experimentData_info=table8.meta_data_id LEFT JOIN xnat_subjectAssessorData_meta_data table9 ON table0.subjectAssessorData_info=table9.meta_data_id LEFT JOIN xyz_myAssessorData_meta_data table10 ON xyz_myAssessorData.myAssessorData_info=table10.meta_data_id
2016-06-14 12:13:51,893 - SELECT i_xyz_myAssessorData('XNAT_TEST_IMPORT_E00003',0,FALSE,TRUE,false)
We found out, that after putting in something in the note field of “xyz:myAssessorData/resources/resource[0]” the error message changes to “org.nrg.xft.XFTItem cannot be cast to org.nrg.xdat.model.XnatAbstractresourceI” (see screenshots) whereas the same errors as the ones above get logged.
Has someone encountered the same issue?
Did you run the schema update SQL after running the update.sh script? Something like:
cd deployments/xnat
psql -f sql/xnat-update.sql
It looks like you have the XML schema imported properly, but not the data schema to support storing the data.
--
Rick Herrick
Sr. Programmer/Analyst
Neuroinformatics Research Group
Washington University School of Medicine
--
You received this message because you are subscribed to the Google Groups "xnat_discussion" group.
To unsubscribe from this group and stop receiving emails from it, send an email to
xnat_discussi...@googlegroups.com.
To post to this group, send email to
xnat_di...@googlegroups.com.
Visit this group at https://groups.google.com/group/xnat_discussion.
For more options, visit https://groups.google.com/d/optout.
The materials in this message are private and may contain Protected Healthcare Information or other information of a sensitive nature. If you are not the intended recipient, be advised that any unauthorized use, disclosure, copying or the taking of any action in reliance on the contents of this information is strictly prohibited. If you have received this email in error, please immediately notify the sender via telephone or return mail.
It’s really hard to say why that might be happening without having the assessor definition and specifics on the data you’re trying to save when you get the error. Also, when you get the error in the UI, are there any entries in the logs on the server side that occur at the same time? That might help us understand what’s happening a bit better.
--
Rick Herrick
Sr. Programmer/Analyst
Neuroinformatics Research Group
Washington University School of Medicine
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xnat="http://nrg.wustl.edu/xnat" xmlns:xyz="http://nrg.wustl.edu/xnat_myData" targetNamespace="http://nrg.wustl.edu/xnat_myData" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:import namespace="http://nrg.wustl.edu/xnat" schemaLocation="../xnat/xnat.xsd"/>
<xs:element name="MyAssessment" type="xyz:myAssessorData"/>
<xs:complexType name="myAssessorData">
<xs:complexContent>
<xs:extension base="xnat:subjectAssessorData">
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>