小编Ana*_*lan的帖子

如何为cxf jax-rs 2.0客户端注册jackson json提供程序?

我有一个JAX-RS客户端正在做一个简单的GET请求.我正在使用CXF实现和Spring for DI.呼叫成功,我得到200响应代码.但是当我将反馈读入我的POJO时,我收到了一个错误.

例外:

[2015-05-08 16:11:55,457][ERROR][org.apache.cxf.jaxrs.utils.JAXRSUtils]: No message body reader has been found for class com.voya.refapp.domain.Customer, ContentType: application/json
[2015-05-08 16:11:55,468][ERROR][com.voya.refapp.service.CustomerServiceImpl]: filterByName() - Exception occurred
javax.ws.rs.client.ResponseProcessingException: No message body reader has been found for class com.voya.refapp.domain.Customer, ContentType: application/json
    at org.apache.cxf.jaxrs.impl.ResponseImpl.reportMessageHandlerProblem(ResponseImpl.java:433) ~[cxf-rt-frontend-jaxrs-3.0.4.jar:3.0.4]
    at org.apache.cxf.jaxrs.impl.ResponseImpl.doReadEntity(ResponseImpl.java:384) ~[cxf-rt-frontend-jaxrs-3.0.4.jar:3.0.4]
Run Code Online (Sandbox Code Playgroud)

码:

Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8080/rest").path("customers/1");
Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON_TYPE);
Response response = builder.get();  // Successful
Customer customer = response.readEntity(Customer.class);  // Fails
Run Code Online (Sandbox Code Playgroud)

我在类路径中的答案中提出了以下依赖关系,它似乎没有自动获取.

    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

我还尝试在创建客户端时注册json提供程序:

Client client = ClientBuilder.newClient().register(new …
Run Code Online (Sandbox Code Playgroud)

java rest cxf jax-rs jackson

11
推荐指数
1
解决办法
1万
查看次数

无法使用DOM解析器读取带有名称空间前缀的xml

这是输入XML:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <ns2:SendResponse xmlns:ns2="http://mycompany.com/schema/">
         <ns2:SendResult>
            <ns2:Token>A00179-02</ns2:Token>
         </ns2:SendResult>
      </ns2:SendResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)

这是我用来读取XML的代码(变量xmlString包含上面的XML):

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xmlString));
Document doc = db.parse(is);

System.out.println("Element :" + doc.getElementsByTagName("Token").item(0));
System.out.println("Element :" + doc.getElementsByTagName("ns2:Token").item(0));
Run Code Online (Sandbox Code Playgroud)

输出:

Element :null
Element :[ns2:Token: null]
Run Code Online (Sandbox Code Playgroud)

如果我使用"ns2:Token"作为标记名称,我能够读取该元素,但我不想在我的代码中使用该前缀,因为我不确定它是否相同或更改未来.有没有办法在不对标记名称中的命名空间进行硬编码的情况下读取xml元素?

java xml dom xml-parsing

8
推荐指数
1
解决办法
2万
查看次数

如何在 python 中创建 JWKS 公钥/私钥对?

如何创建 JWKS 公钥/私钥对,类似于可以在https://mkjwk.org/手动创建的密钥对,其中包括密钥 ID ( kid) 和密钥使用( use)?我使用该cryptography模块生成 RSA 密钥对并将python-jose密钥提取为 JWK,但创建的密钥不包括kiduse(毫不奇怪,因为它们没有在任何地方指定)。

\n

代码:

\n
from cryptography.hazmat.backends import default_backend\nfrom cryptography.hazmat.primitives import serialization\nfrom cryptography.hazmat.primitives.asymmetric import rsa\n\xe2\x80\x8b\nfrom jose import jwk, constants\nimport json\n\xe2\x80\x8b\nkey = rsa.generate_private_key(\n    public_exponent=65537,\n    key_size=2048,\n    backend=default_backend()\n)\npublic_key = key.public_key().public_bytes(\n    encoding=serialization.Encoding.PEM,\n    format=serialization.PublicFormat.SubjectPublicKeyInfo\n)\nprivate_key = key.private_bytes(\n    encoding=serialization.Encoding.PEM,\n    format=serialization.PrivateFormat.TraditionalOpenSSL,\n    encryption_algorithm=serialization.NoEncryption()\n)\n\xe2\x80\x8b\nprint(json.dumps(jwk.RSAKey(algorithm=constants.Algorithms.RS256, key=public_key.decode(\'utf-8\')).to_dict()))\nprint(json.dumps(jwk.RSAKey(algorithm=constants.Algorithms.RS256, key=private_key.decode(\'utf-8\')).to_dict()))\n
Run Code Online (Sandbox Code Playgroud)\n

通过上面的代码片段生成的公钥(无kiduse属性):

\n
{\n    "alg": "RS256",\n    "kty": "RSA",\n    "n": "tqbcR_6JC....OKQ",\n    "e": "AQAB"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

python cryptography public-key-encryption python-3.x

7
推荐指数
2
解决办法
1万
查看次数