Как вызвать метод findObjects Fedora Commons (веб-сервис) - PullRequest
1 голос
/ 18 декабря 2011

Я пытаюсь выполнить поиск через веб-сервис Fedora Commons.Меня интересует метод findObjects .Как сделать поиск в Java равным примеру, описанному в документации по синтаксису findObjects .

. Мне особенно интересен этот тип запроса:

http://localhost:8080/fedora/search?terms=fedora&pid=true&title=true

Я прикреплю код, у меня есть класс, который уже может вызывать мой сервис Fedora.

package test.fedora;

import info.fedora.definitions._1._0.types.DatastreamDef;
import info.fedora.definitions._1._0.types.MIMETypedStream;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.List;
import javax.xml.ws.BindingProvider;
import org.w3c.dom.Document;

public class FedoraAccessor {
    info.fedora.definitions._1._0.api.FedoraAPIAService service;
    info.fedora.definitions._1._0.api.FedoraAPIA port;
    final String username = "xxxx";
    final String password = "yyyy";

    public FedoraAClient() {
        service = new info.fedora.definitions._1._0.api.FedoraAPIAService();
        port = service.getFedoraAPIAServiceHTTPPort();
        ((BindingProvider) port.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
        ((BindingProvider) port).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
    }

    public List findObjects() {
        //how?
    }

    public List<DatastreamDef> listDatastreams(String pid, String asOfTime) {
        List<DatastreamDef> result = null;
        try { 
            result = port.listDatastreams(pid, asOfTime);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return result;
    }
}

1 Ответ

1 голос
/ 10 февраля 2012

Проще использовать клиент из mediashelf (http://mediashelf.github.com/fedora-client/). Вот пример поиска объектов, содержащих в заголовке строку foobar:

@Test
 public void doTest() throws FedoraClientException {
    connect();
    FindObjectsResponse response = null;

    response = findObjects().pid().title().query("title~foobar").execute(fedoraClient);
    List<String> pids = response.getPids();

    List<String> titles = new ArrayList<String>();
    for (String pid : pids) {
        titles.add(response.getObjectField(pid, "title").get(0));
    }
    assertEquals(7, titles.size());
  }
...