Anda di halaman 1dari 9

List Error dan Bugs di dspace

1. Sword URL
Masalah ini dikarenakan sword hanya menerima deposit dari URL yang diconfigurasi di
dspace.cfg

2. Sword metadata
Masalah ini hanya terjadi di server demodspace.widyatama.ac.id sedangkan jika install biasa
(komputer saya) tidak terjadi apa-apa. Peringatan error yang keluar pada error ini adalah
pada format metadata yang ada di sword-metadata.xml yaitu :
<dc-type>
<schema>dc</schema>
<element>date</element>
<qualifier>updated</qualifier>
<scope_note>The last time the item was updated via the SWORD
interface</scope_note>
</dc-type>
Schema diatas tidak bisa dibaca oleh dpace di demodspace.widyatama.ac.id (peringatan
errornya adalah BAD_DUBLIN_CORE).

3. Sword Client di dspace
Setelah Berhasil memperbaiki masalah no 1 dan 2, deposit bisa dilakukan namun kecuali
deposit dari dspace itu sendiri karena masih terjadi error. Error terjadi pada saat setelah
memanggil service document, kemudian terdapat form untuk memilih sub service (
memilih collection). Error yang muncul adalah collection bernilai null dan pada log dspace
yaitu Malformed URL : Get Sub Service Document

4. OAI harvest, HTTP URL parameter timestamp until sama seperti from
Terdapat bugs pada HTTP URL untuk protokol timestamp yaitu protokol until yang dianggap
sama seperti protokol from.

5. OAI Data Provider, list record tidak muncul
record dan identifier pada Dspace OAI Data Provider tidak ada. Contoh pada URL ini record
tidak ada :
http://demodspace.widyatama.ac.id:8080/oai/request?verb=ListRecords&metadataPrefix=o
ai_dc
http://demodspace.widyatama.ac.id:8080/oai/request?verb=ListIdentifiers&metadataPrefix
=oai_dc

6. OAI-ORE, URL pengetesan untuk mendapatkan ore.xml tidak ada
Untuk mendapatkan bitstream/agar file yang di harvest bisa didownload/dibaca maka
dilakukan pengecekan dahulu ke alamat URL :
demo.dspace.org/oai/request?verb=ListRecords&metadataPrefix=ore
kemudian
http://demo.dspace.org/xmlui/metadata/handle/10673/3/ore.xml
akan tetapi untuk ore.xml tidak dapat dipanggil, terdapat error yaitu :
org.dspace.content.crosswalk.CrosswalkInternalException: Base uri for the ore generator
has not been set. Check the ore.authoritative.source setting.

7. OAI-ORE, HTTP biststream bernilai null
Meskipun permasalahan pada nomor 6 telah diperbaiki namun masalah bitstream ini masih
ada. Yaitu bitstream null. Berikut log nya :
2013-05-16 00:42:00,953 ERROR org.dspace.harvest.OAIHarvester @ Error occured while
generating an OAI response: Server returned HTTP response code: 400 for URL:
http://demodspace.widyatama.ac.id:8080/xmlui/bitstream/123456789%2F34/1/bitstream null
2013-05-16 00:42:01,065 INFO org.dspace.content.Collection @
esa.fauzi@gmail.com:session_id=758AAA12612647A8CC3514552086BF7B:ip_addr=127.0.0.1:upda
te_collection:collection_id=6

8. OAI Parameter http untuk until dan from salah.
Terdapat kesalahan pada parameter until dan from. Kesalahan ini juga terjadi pada 2
metode penyimpanan yang disediakan, yaitu solr dan database. Untuk solr terjadi kesalahan
pada zona waktunya,. Zona waktu yang dimasukkan tidak sesuai dengan zona waktu
indonesia GMT+7. Untuk database tidak terjadi kesalahan pada zona waktu tetapi kesalahan
terjadi pada format tanggal yang disimpan. Format tanggal dalam database berbeda saat
dipanggil aplikasi, perbedaan ada ada pada milisecondnya. Dalam database milisecondnya
tercatat tetapi pada saat dipanggil milisecondnya tidak ada.

9. Handle URI agar selalu menunjuk pada link url sendiri. Tidak hdl.handle.net
10. Database sequence salah
11. Hak akses untuk item dibuka semua
12. Masukan scopus
13. Masukan google analytc
14. Masukan google verification
15. jalankan sitemap
16. jalankan statistic
17. benerin tampilan yang bugs pada community/collection viewer

Penyelesaian
Ket. Semua source yang dirubah/ditambahkan selalu diberi coment esa. Jadi silahkan search
dengan kata esa untuk mengetahui lokasi perubahan dan penambahan yang dilakukan.
1. Sword URL
Penyelesaian masalah ini adalah dengan mengganti method getDSpaceObject di class
SwordURLManager. Berikut method yang baru :
public DSpaceObject getDSpaceObject(Context context, String location)
throws DSpaceSWORDException, SWORDErrorException
{
try
{
URL baseUrl = new URL(this.getBaseDepositUrl());
URL depositUrl = new URL(location);

String basePath = baseUrl.getPath();
String depositPath = depositUrl.getPath();

if (basePath.length() == depositPath.length())
{
throw new
SWORDErrorException(DSpaceSWORDErrorCodes.BAD_URL, "The deposit URL is incomplete");
}
String handle = depositPath.substring(basePath.length());
if (handle.startsWith("/"))
{
handle = handle.substring(1);
}
if ("".equals(handle))
{
throw new
SWORDErrorException(DSpaceSWORDErrorCodes.BAD_URL, "The deposit URL is incomplete");
}
DSpaceObject dso = HandleManager.resolveToObject(context,
handle);


log.info("handle : "+handle);
log.info("location : "+location);
log.info("basePath : "+handle);
log.info("depositPath : "+handle);
log.info("dso handle : "+dso.getHandle());
log.info("user : "+context.getCurrentUser().getEmail());

if (!(dso instanceof Collection) && !(dso instanceof Item))
{
throw new
SWORDErrorException(DSpaceSWORDErrorCodes.BAD_URL, "The deposit URL does not resolve
to a valid deposit target with handle string :"+handle);
}
return dso;
}
catch (SQLException e)
{
// log.error("Caught exception:", e);
throw new DSpaceSWORDException("There was a problem resolving
the collection", e);
} catch (MalformedURLException e) {
throw new SWORDErrorException(DSpaceSWORDErrorCodes.BAD_URL,
"The deposit URL is incomplete");
}
}
Penyelesaian lebih lengkap di link https://jira.duraspace.org/browse/DS-598

2. Sword Metadata
Untuk menyelesaikan masalah ini adalah dengan mengedit sourcecode yang memanggil
schema dc date updated. Hal ini saya lakukan karena dengan cara menghapus dc date
updated di sword-metadata.xml atau menambah tipe dublin core baru di dublin-core-
types.xml/input-forms.xml tidak menyelesaikan apa-apa. Karena itu saya mencoba untuk
mengubah script/method yang memanggil dc schema tersebut dan hasilnya berhasil. Berikut
perubahannya :
Pada method ingest di kelas SwordMETSIngester hapus/berikan komentar pada
baris berikut :
this.setUpdatedDate(installedItem);
3. Sword client di dspace
Penyebab error sword client di space adalah pada saat pemanggilan request parameter
(sub-service). Penamaan variabel sub-service ternyata terjadi duplicate sehingga
pemanggilan tidak berhasil. Karena untuk menyelesaikan masalah ini terdapat pengeditan
nama variabel sub-service. Berikut perubahannya :
collectionDiv.addPara(T_sub_service_target + collection.getService());
//modify by esa
//BEFORE
//collectionDiv.addPara().addButton("sub-
service").setValue(T_sub_service_target_button);
//AFTER
collectionDiv.addPara().addButton("sub-
serviced").setValue(T_sub_service_target_button);
collectionDiv.addHidden("sub-
service").setValue(collection.getService());
collectionDiv.addHidden("swordclient-
continue").setValue(knot.getId());

Pada potongan script diatas penamaan sub-service yaitu untuk button dan addHidden,
seharusnya yang dipanggil adalah sub-service addHidden. Tapi karena ada dua maka
pemanggilan salah. Perubahan ini terjadi pada kelas SelectCollectionTransformer method
addBody

4. OAI harvest, HTTP URL protokol timestamp until sama seperti from
Error pada protokol disini disebabkan karena salah memasukkan paramaeter. Untuk
menyelesaikan masalah ini maka parameter yang salah harus diperbaiki. Kesalahan ini
terjadi kelas DspaceItemRepository method ListItemResult

public ListItemsResults getItemsUntil(List<Filter> filters, int offset,
int length, String setSpec, Date from)
{
/**BUG EDIT BY ESA**/
filters.add(new Filter(new DateFromFilter(from), FilterScope.Query));
//filters.add(new Filter(new DateUntilFilter(from), FilterScope.Query));
filters.add(new Filter(new DspaceSetSpecFilter(setSpec),
FilterScope.Query));
return this.getItems(filters, offset, length);
}

Walaupun masalah ini telah diperbaiki, namun ini hanya berlaku untuk dspace milik sendiri
saja, karena dpace yang lain mungkin saja belum diperbaiki (seperti pada demo.dspace.org).
akibatnya proses harvesting tetap tidak akan berhasil. Oleh karena itu untuk mengakali
masalah ini maka dibuatlah parameter input baru pada saat proses harvesting. Parameter
tersebut adalah until dan from untuk protokol datestamp.


Pola harvesting di dspace








setupCollectionHarvestingForm.java
Administrative.js

FlowContainerUtils.java
Database
Message.xml
HarvestedCollection.java








Kelas, java script, dan database perlu dirubah untuk pembuatan parameter datestamp
Berikut perubhannya :

a. Menambah di message.xml
Berikut penambahannya :

<message
key="xmlui.administrative.collection.SetupCollectionHarvestingForm.date_from">Date
From</message>
<message
key="xmlui.administrative.collection.SetupCollectionHarvestingForm.date_until">Date
Until</message>

b. Pada class setupCollectionHarvestingForm
Class ini adalah class yang berisikan data pada saat memasukkan parameter2 harvesting.
Disini saya menambahkan data berupa date from dan date until sebagai parameter
rentang waktu dari data yang akan dilakukan harvesting. Berikut perubahannya :

//Modify for datestamp OAI, by esa fauzi

settings.addLabel(T_label_date_from);
Text oaiDateFrom = settings.addItem().addText("date_from");
oaiDateFrom.setSize(40);
// add default time to 10 years ago

String timeStamp = new SimpleDateFormat("yyyy-MM-
dd'T'HH:mm:ss'Z'").format(Calendar.getInstance().getTime());
oaiDateFrom.setValue(timeStamp);
settings.addLabel(T_label_date_until);
Text oaiDateUntil = settings.addItem().addText("date_until");
oaiDateUntil.setSize(40);
// add default time to current time
timeStamp = new SimpleDateFormat("yyyy-MM-
dd'T'HH:mm:ss'Z'").format(Calendar.getInstance().getTime());
oaiDateUntil.setValue(timeStamp);

c. Administrative.js
Pada File javascript ini saya melakukan perubahan pada method
doSetupCollectionHarvesting(collectionID) disini saya menambahkan parameter date from
dan until. berikut perubahannya :

//added for parameter date from and date until, modify by esa fauzi
var dateFrom = null;
var dateUntil = null;

dan
// modify by esa fauzi
// old version :
sendPageAndWait("admin/collection/setupHarvesting",{"collectionID":collectio
nID,"oaiProviderValue":oaiProviderValue,"oaiSetAll":oaiSetAll,"oaiSetIdValue
":oaiSetIdValue,"metadataFormatValue":metadataFormatValue,"harvestLevelValue
":harvestLevelValue},result);

sendPageAndWait("admin/collection/setupHarvesting",{"collectionID":collectio
nID,"oaiProviderValue":oaiProviderValue,"oaiSetAll":oaiSetAll,"oaiSetIdValue
":oaiSetIdValue,"metadataFormatValue":metadataFormatValue,"harvestLevelValue
":harvestLevelValue,"date_from":dateFrom, "date_until":dateUntil},result);
dan
//added for parameter date from and date until, modify by esa fauzi
dateFrom = cocoon.request.get("date_from");
dateUntil = cocoon.request.get("date_until");


d. processSetupCollectionHarvesting method pada class FlowContainerUtils.java
method disini adaloah method untuk melakukan inisialisasi terhadap data harvest. Data
harvest akan dimasukkan ke dalam database dan dinamakan collection harvesting. Disini
saya melakukan penambah setup untuk date from dan date until. Berikut penambahan dan
perubahannya :

/*Edit for param start and until date, modify by esa fauzi*/
//SimpleDateFormat formatter = new SimpleDateFormat("yyyy-
MM-dd'T'HH:mm:ss'Z'");


try {
Date from = new SimpleDateFormat("dd-MM-yyyy
hh:mm:ss").parse(request.getParameter("date_from"));
Date until = new SimpleDateFormat("dd-MM-yyyy
hh:mm:ss").parse(request.getParameter("date_until"));

// old version :
//hc.setHarvestParams(Integer.parseInt(harvestType),
oaiProvider, oaiSetId, metadataKey);

hc.setHarvestParams(Integer.parseInt(harvestType),
oaiProvider, oaiSetId, metadataKey, from, until);

// row script below is old version
hc.setHarvestStatus(HarvestedCollection.STATUS_READY);

} catch (ParseException ex) {

Logger.getLogger(FlowContainerUtils.class.getName()).log(Level.SEVERE, null, ex);
}


e. HarvestedCollection class
Kelas ini adalah kelas untuk menyimpan data harvest terdiri dari id, dan semacamnya.
Pada kelas ini saya menambahkan method baru. Yaitu method untuk set dan get serta setup
untuk from date dan last date sebagai parameter baru.

/* set harvest with params date from and date until, created by esa **/
public void setHarvestParams(int type, String oaiSource, String oaiSetId, String
mdConfigId, Date from, Date until) {
setHarvestType(type);
setOaiSource(oaiSource);
setOaiSetId(oaiSetId);
setHarvestMetadataConfig(mdConfigId);
setHarvestFromTime(from);
setHarvestUntilTime(until);
}

public void setHarvestFromTime(Date date) {
if (date == null) {
harvestRow.setColumnNull("harvest_from_time");
} else {
harvestRow.setColumn("harvest_from_time", date);
}
}

public void setHarvestUntilTime(Date date) {
if (date == null) {
harvestRow.setColumnNull("harvest_until_time");
} else {
harvestRow.setColumn("harvest_until_time", date);
}
}

/*Added by Esa fauzi*/
public Date getHarvestFromTime() {
return harvestRow.getDateColumn("harvest_from_time");
}

/*Added by Esa fauzi*/
public Date getHarvestUntilTime() {
return harvestRow.getDateColumn("harvest_until_time");
}

f. Menambah date from dan date until pada database
Disini perlu ditambahkan kolom baru pada tabel harvested_collection untuk parameter
date from dan date until.

ALTER Table harvested_collection
ADD harvest_from_time timestamp with time zone;

ALTER Table harvested_collection
ADD harvest_until_time timestamp with time zone;

g. Mengubah Class OAIHarvester.java
Agar bisa melakukan request HTTP dengan paramater from dan until time maka perlu
ada perubahan pada kelas ini. Berikut perubahan yang dilakukan :

/* pengaturan date yang lama*/
// Date lastHarvestDate = harvestRow.getHarvestDate();
// String fromDate = null;
// if (lastHarvestDate != null)
// {
// fromDate = processDate(harvestRow.getHarvestDate());
// }
//
//
// Date startTime = new Date();
// String toDate = processDate(startTime,0);
Date from = harvestRow.getHarvestFromTime();
String fromDate = processDate(from);

Date until = harvestRow.getHarvestUntilTime();
String toDate = processDate(until);

Date startTime = new Date();
String dateGranularity;

5. OAI Data Provider, list record tidak muncul
Untuk memunculkan list record dan idenfier maka dapat dilakukan dengan cara:

[dspace]/bin/dspace oai import c

Namun pada demodspace masih memiliki error hal ini dikarenakan konfigurasi pada OAI.cfg
terdapat kesalahan. Berikut seharusnya :
solr.url=http://localhost:8080/solr/oai
Selain itu pada dspace.cfg terdapat kesalahan penulisan pada tulisan assetstore.dir.1 dan
harus diperbaiki

6. OAI-ORE, URL pengetesan untuk mendapatkan ore.xml tidak ada
Masalah ini terjadi karena konfigurasi dspace.oai.url tidak ada pada oai.cfg maka perlu
ditambahkan. Contoh :
dspace.oai.url = ${dspace.baseUrl}/oai

pastikan juga ore.authoritative.source = oai ada.

7. OAI-ORE, HTTP biststream bernilai null
Masalah ini disebabkan karena url %2F tidak dikonversi dengan benar menjadi /. Kesalahan
sampai saat ini tidak dapat ditemukan sehingga untuk menyelesaikan masalah ini dilakukan
dengan cara memanipulasi url yang diperoleh untuk proses OAI. Pengubahan url terdapat
pada class
OREDisseminationCrosswalk
OREIngestionCrosswalk
OAIHarvester

Ket. Perubahan bisa dilihat dengan mencari keyword esa pada file yang dimaksud.

8. Masalah ini karena parameter time zone salah. Kedua masalah yang ada pada solr dan
database dapat dilihat di class DateFromFilter dan DateUntilFilter, .

9. Handle URI agar selalu menunjuk pada link url sendiri. Tidak hdl.handle.net
10. Database sequence salah
11. Cek isi database yang diinputkan thn 2013
12. Hak akses untuk item dibuka semua
13. Masukan scopus
14. Masukan google analytc
15. Masukan google verification
16. Masukan Bing verification
17. jalankan sitemap
18. jalankan statistic
19. benerin tampilan yang bugs pada community/collection viewer

Anda mungkin juga menyukai