将 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)转到组 -> 默认 -> 应用服务器 -> 应用服务(或任何你想更改的服务器),然后查找身份验证下拉列表并将其更改为基本或应用程序级别(如果您执行应用程序级别,则必须将默认用户设置为您要测试的用户)
我正在尝试配置 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)转到组 -> 默认 -> 应用服务器 -> 应用服务(或任何你想更改的服务器),然后查找身份验证下拉列表并将其更改为基本或应用程序级别(如果您执行应用程序级别,则必须将默认用户设置为您要测试的用户)