我有一个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) 这是输入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元素?
如何创建 JWKS 公钥/私钥对,类似于可以在https://mkjwk.org/手动创建的密钥对,其中包括密钥 ID ( kid
) 和密钥使用( use
)?我使用该cryptography
模块生成 RSA 密钥对并将python-jose
密钥提取为 JWK,但创建的密钥不包括kid
和use
(毫不奇怪,因为它们没有在任何地方指定)。
代码:
\nfrom 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通过上面的代码片段生成的公钥(无kid
或use
属性):
{\n "alg": "RS256",\n "kty": "RSA",\n "n": "tqbcR_6JC....OKQ",\n "e": "AQAB"\n}\n
Run Code Online (Sandbox Code Playgroud)\n java ×2
cryptography ×1
cxf ×1
dom ×1
jackson ×1
jax-rs ×1
python ×1
python-3.x ×1
rest ×1
xml ×1
xml-parsing ×1