我有一组要求,要求 Jersey/JAX-RS 客户端将 ZIP 文件发布到 Artifactory 上的存储库。具体来说,我需要将 ZIP 发布到:
http://artifactory01.example.org/artifactory/simple/libs-release-local/ourorg/somelib/1.0.0/
看起来 Artifactory 公开了 PUT endpoint :
PUT /libs-release-local/my/jar/1.0/jar-1.0.jar {
"uri": "http://localhost:8080/artifactory/libs-release-local/my/jar/1.0/jar-1.0.jar",
"downloadUri": "http://localhost:8080/artifactory/libs-release-local/my/jar/1.0/jar-1.0.jar",
"repo": "libs-release-local",
"path": "/my/jar/1.0/jar-1.0.jar",
"created": ISO8601 (yyyy-MM-dd'T'HH:mm:ss.SSSZ),
"createdBy": "userY",
"size": "1024", //bytes
"mimeType": "application/java-archive",
"checksums": {
"md5" : string,
"sha1" : string
},
"originalChecksums": {
"md5" : string,
"sha1" : string
}
}
因此,看起来我需要将 somelib-1.0.0.zip
放到我上面标识的 URL 中。我的建议如下:
// Groovy pseudo-code for the PUT entity:
class Publication {
@JsonProperty
String uri
@JsonProperty
String downloadUri
@JsonProperty
String repo
@JsonProperty
String path
@JsonProperty
Date created
@JsonProperty
String createdBy
@JsonProperty
Integer size
@JsonProperty
String mimeType
@JsonProperty
Map<String,String> checksums
@JsonProperty
Map<String,String> originalChecksums
}
但是,有两个问题:
安全
此端点上的安全约束需要具有“部署”权限的用户。我有这样的用户,但是我不确定如何在客户端实现此身份验证。 Artifactory 是否对其端点使用基本身份验证?如果是这样,这样的事情会起作用吗(?):
Client client = Client.create();
WebResource resource = client.resource(BASE_URI);
client.addFilter(new HTTPBasicAuthFilter("deployuser", "12345")); // dummy credentials, obviously
PUT 实体
最重要的是,我不明白 PUT
实体应该是什么。使用 Jersey/JAX-RS 风格的 POJO,我可能会这样做:
// Again, Groovy pseudo-code
Publication publication = getSomehow() // Ideally ZIP is read into portable format by this point
webResource.path("libs-release-local").path("ourorg").path("somelib").path("1.0.0").path("somelib-1.0.0.zip")
.type(MediaType.???).entity(publication).put(???)
但是,我仍然不知道如何/在哪里发送实际的 ZIP 文件。有 path
字段,它似乎指定二进制文件的本地(客户端)路径,但这只是一个字符串/引用,而不是要发布的实际二进制文件!
另外,根据维基百科,ZIP 媒体类型是 application\zip
,但没有这样的 MediaType
在 JAX-RS 中定义。
这里有什么想法吗?
最佳答案
基本身份验证很好。 对于实体,你不需要任何。您在文档中看到的 JSON 是 PUT 调用的结果。
关于java - 从 Jersey/JAX-RS 客户端将 ZIP 发布到 Artifactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29078787/