将 SOAP UI 用于 Marklogic SPARQL REST API 时出现问题

Issue while using SOAP UI for Marklogic SPARQL REST API

我正在尝试配置 SOAP UI 以通过 REST API 访问 Marklogic RDF 数据。

ML api中的例子在curl中给出为:

curl --anyauth --user admin:admin -i -X POST \
--data-binary @./booktitle.sparql \
-H "Content-type:application/sparql-update" \
-H "Accept:application/sparql-results+xml" \
http://localhost:8000/v1/graphs/sparql

所以在 Soap UI 4.6.4 我添加了两个 headers:

Accept: application/rdf+xml
Content-Type: application/sparql-query

内容类型为application/sparql-query

添加了 query.sparql 文件作为附件,查询如下:

#file name query.sparql
PREFIX db: <http://dbpedia.org/resource/>
PREFIX onto: <http://dbpedia.org/ontology/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX xs: <http://www.w3.org/2001/XMLSchema#>    

        SELECT ( CONCAT(?G, " ", ?S) AS ?name )
    WHERE  { db:A._J._Langer foaf:givenName ?G ; foaf:surname ?S }

并在身份验证选项卡中提供了用户名和密码,并尝试了基本身份验证和抢先身份验证。 但是在点击 POST 请求时出现以下错误:

2015:ERROR:org.apache.http.client.ClientProtocolException
   org.apache.http.client.ClientProtocolException
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:822)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
    at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport$Helper.execute(HttpClientSupport.java:238)
    at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport.execute(HttpClientSupport.java:348)
    at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.submitRequest(HttpClientRequestTransport.java:318)
    at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.sendRequest(HttpClientRequestTransport.java:232)
    at com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.java:123)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
   Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity.
    at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:611)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:454)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
    ... 11 more

soap 的 http 日志 ui 说:

Fri Mar 20 11:46:53 IST 2015:DEBUG:<< "<error-response xmlns='http://marklogic.com/xdmp/error'>[\n]"
Fri Mar 20 11:46:53 IST 2015:DEBUG:<< "  <status-code>401</status-code>[\n]"
Fri Mar 20 11:46:53 IST 2015:DEBUG:<< "  <status>Unauthorized</status>[\n]"
Fri Mar 20 11:46:53 IST 2015:DEBUG:<< "  <message>401 Unauthorized</message>[\n]"
Fri Mar 20 11:46:53 IST 2015:DEBUG:<< "</error-response>[\n]"

虽然使用相同的设置,但我能够看到 HttpRequester(Firefox) 的响应。

我是否需要在 soap 中做一些额外的设置 ui。

您使用的是什么应用服务器?

如果它是一个应用程序服务(端口 8000),您需要使用摘要身份验证。

您可以将其更改为 basic 以使其更容易,但它的安全性会降低,但如果这不是用于生产,您应该没问题。

只需转到左侧导航栏上的管理员 cp(端口 8001)转到组 -> 默认 -> 应用服务器 -> 应用服务(或任何你想更改的服务器),然后查找身份验证下拉列表并将其更改为基本或应用程序级别(如果您执行应用程序级别,则必须将默认用户设置为您要测试的用户)