【问题标题】:Creating Sonatype Nexus repository using REST API causes HTTP/1.1 400 Bad Request使用 REST API 创建 Sonatype Nexus 存储库会导致 HTTP/1.1 400 错误请求
【发布时间】:2014-12-15 21:45:06
【问题描述】:

在尝试使用 REST API 创建新的 Sonatype Nexus 托管存储库时,我收到“HTTP/1.1 400 Bad Request”。我正在使用本地运行的 Sonatype Nexus™ 2.10.0-02。

根据 REST API 文档,可在

http://localhost:8081/nexus/nexus-restlet1x-plugin/default/docs/path__repositories.html

要创建新的存储库,POST 请求必须如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<repository>
    <data>
       <format>...</format>
       <providerRole>...</providerRole>
       <exposed>...</exposed>
       <id>...</id>
       <name>...</name>
       <contentResourceURI>...</contentResourceURI>
       <repoType>...</repoType>
       <provider>...</provider>
    </data>
</repository>

所以,我的 XML 有效负载如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<repository>
    <data>
        <format>maven2</format>
        <providerRole>org.sonatype.nexus.proxy.repository.Repository</providerRole>
        <exposed>true</exposed>
        <id>my-releases</id>
        <name>MyReleases</name>
        <contentResourceURI>http://localhost:8081/nexus/content/repositories/my-releases</contentResourceURI>
        <repoType>hosted</repoType>
        <provider>maven2</provider>
    </data>
</repository>

到这里(我希望)还可以。

我使用 cURL 来发布这个 XML 内容:

curl -i -H "Accept: application/xml" -H "Content-Type: application/xml" -f -X POST -v -d "@$(pwd)/insert_oss_repository.xml" -u admin:admin123 http://localhost:8081/service/local/repositories

这个命令的完整日志是这样的:

* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8081 (#0)
* Server auth using Basic with user 'admin'
> POST /nexus/service/local/repositories HTTP/1.1
> Authorization: Basic YWRtaW46YWRtaW4xMjM=
> User-Agent: curl/7.35.0
> Host: localhost:8081
> Accept: */*
> Content-Type:application/xml
> Content-Length: 327
> 
* upload completely sent off: 327 out of 327 bytes
< HTTP/1.1 400 Bad Request
< Date: Mon, 20 Oct 2014 19:19:21 GMT
* Server Nexus/2.10.0-02 is not blacklisted
< Server: Nexus/2.10.0-02
< X-Frame-Options: SAMEORIGIN
< X-Content-Type-Options: nosniff
< Set-Cookie: rememberMe=deleteMe; Path=/nexus; Max-Age=0; Expires=Sun, 19-Oct-2014 19:19:21 GMT
< Content-Type: application/xml; charset=UTF-8
< Date: Mon, 20 Oct 2014 19:19:21 GMT
* Server Noelios-Restlet-Engine/1.1.6-SONATYPE-5348-V8 is not blacklisted
< Server: Noelios-Restlet-Engine/1.1.6-SONATYPE-5348-V8
< Content-Length: 183
< 
<nexus-error>
  <errors>
    <error>
      <id>*</id>
      <msg>No enum const class org.sonatype.nexus.proxy.maven.RepositoryPolicy.null</msg>
    </error>
  </errors>
* Connection #0 to host localhost left intact
</nexus-error>

首先,我会阅读您对我的 POST 请求的 XML 有效负载的评论。其次,如果他们花时间创建一种文档,为什么不提供一个工作示例呢?第三,如果他们提供了这个 REST API,为什么他们不提供人类可读的答案?

【问题讨论】:

    标签: rest post repository nexus sonatype


    【解决方案1】:

    看起来文档中可能存在错误,您还需要提供“repoPolicy”元素。这是一个示例负载:

    <repository>
      <data>
        <id>my-releases-xml</id>
        <name>MyReleasesXml</name>
        <exposed>true</exposed>
        <repoType>hosted</repoType>
        <repoPolicy>RELEASE</repoPolicy>
        <providerRole>org.sonatype.nexus.proxy.repository.Repository</providerRole>
        <provider>maven2</provider>
        <format>maven2</format>
      </data>
    </repository>
    

    一般来说,使用 Nexus 和 REST 的最佳方法是使用 JSON 负载,这些负载很容易被发现,因为 UI 通过 REST 层调用并发送 JSON。请参阅此处了解更多信息:

    http://blog.sonatype.com/2012/07/learning-the-nexus-rest-api-read-the-docs-or-fire-up-a-browser/

    【讨论】:

    • 这是成功的关键。然后他们应该生成指出强制文件的 REST API 文档。谢谢。
    • 还有一点,repositories 和 all_repositories 的 GET 操作应该生成这个元素。
    猜你喜欢
    • 2017-07-21
    • 2014-10-05
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多