从 Jersey/JAX-RS 客户端将 ZIP 发布到 Artifactory
Publishing ZIPs to Artifactory from Jersey/JAX-RS Client
我有一组要求,要求 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
}
但是,2个问题:
安全
此端点的安全约束要求用户具有 'deploy' 权限。我有这样的用户,但是我不确定如何在客户端实现此身份验证。 Artifactory 是否对其端点使用基本身份验证?如果是这样,这样的事情会有效吗(?):
Client client = Client.create();
WebResource resource = client.resource(BASE_URI);
client.addFilter(new HTTPBasicAuthFilter("deployuser", "12345")); // dummy credentials, obviously
放置实体
最重要的是,我不明白 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(???)
但是,我仍然没有看到 how/where 我发送了实际的 ZIP 文件。有一个 path
字段,它似乎指定了二进制文件的本地(客户端)路径,但这只是一个 string/reference,而不是要发布的实际二进制文件!
此外,根据维基百科,ZIP 媒体类型是 application\zip
,但 JAX-RS 中没有这样的 MediaType
定义。
有什么想法吗?
基本身份验证很好。
重新实体,你不需要任何。您在文档中看到的 JSON 是 PUT 调用的 结果。
我有一组要求,要求 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
}
但是,2个问题:
安全
此端点的安全约束要求用户具有 'deploy' 权限。我有这样的用户,但是我不确定如何在客户端实现此身份验证。 Artifactory 是否对其端点使用基本身份验证?如果是这样,这样的事情会有效吗(?):
Client client = Client.create();
WebResource resource = client.resource(BASE_URI);
client.addFilter(new HTTPBasicAuthFilter("deployuser", "12345")); // dummy credentials, obviously
放置实体
最重要的是,我不明白 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(???)
但是,我仍然没有看到 how/where 我发送了实际的 ZIP 文件。有一个 path
字段,它似乎指定了二进制文件的本地(客户端)路径,但这只是一个 string/reference,而不是要发布的实际二进制文件!
此外,根据维基百科,ZIP 媒体类型是 application\zip
,但 JAX-RS 中没有这样的 MediaType
定义。
有什么想法吗?
基本身份验证很好。 重新实体,你不需要任何。您在文档中看到的 JSON 是 PUT 调用的 结果。