2

我是使用 Apache CXF 为 Restful API 编写 Java 客户端的新手。

在运行以下代码时,我收到错误 415 返回,当我在线查看时显示为“不支持的媒体类型”。为了修复它,我将代码从原始 target.request() 更改为“target.request(MediaType.APPLICATION_XML)”。但是,这并没有修复代码。

调试此问题的最佳方法是什么?非常感谢您抽出宝贵时间。

更新:在与 Rest API 开发人员讨论后,我知道我需要添加一个标头“(“Content-Type”,“application/x-www-form-urlencoded”);”。但我不确定如何添加标题。有谁知道如何在此处添加此标头?

package com.blackhawk.ivr.restAPI.client;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

public class BlissRestAPI {

public static final String BLISS_SERVICRE_URL = "http://x.x.x.x:9090/services";

public static void main(String[] args) {
    Client client = ClientBuilder.newClient();      
    WebTarget target = client.target(BLISS_SERVICRE_URL);
    target = target.path("/cardmanagementservices/v3/card/status").queryParam("ani", "xxxxxxxxxx").queryParam("card.expiration", "xxxxxx").queryParam("card.number", "xxxxxxxxxxxxxxxx").queryParam("channel.id", "xyz");
    Invocation.Builder builder = target.request(MediaType.APPLICATION_XML);             
    Response response = builder.get();
    System.out.println(response.getStatus());       
    response.close();
    client.close();
}

}

4

2 回答 2

0

首先,您可以更改媒体类型,如下所示。

  • 客户端:MediaType.APPLICATION_XML
  • 休息:MediaType.APPLICATION_JSON

JAX-WS 是构建 Web 服务的 Java 标准。所以你在这里使用了它,据我所知,很容易将轴 2 用于这种 Web 服务和客户端,因为 JAX-WS 的实现更多。所以我会给你一个使用apache轴技术的解决方案。

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;

import javax.xml.rpc.ParameterMode;


public class axisClient {

   public static void main(String [] args) throws Exception {

      String endpoint = "http://localhost:8090/archive_name/service_name.jws";

      Service service = new Service();
      Call call    = (Call) service.createCall();



      call.setTargetEndpointAddress( new java.net.URL(endpoint) );
      call.setOperationName( "service_method_name" );
      call.addParameter("parameter_name", XMLType.XSD_STRING, ParameterMode.IN );
      call.setReturnType( XMLType.XSD_STRING );
      call.setProperty(Call.CHARACTER_SET_ENCODING, "UTF-8");

      String jsonString = (String) call.invoke( new Object [] { "parameter_value"});

      System.out.println("Got result : " + jsonString);
   }
}
于 2016-01-12T02:32:18.410 回答
0

我通过使用以下代码使其工作(返回 200 状态)

    WebClient client = WebClient.create(BLISS_SERVICRE_URL);
    client.path("/cardmanagementservices/v3/card/status").query("ani", "xxxxxxxxxx").query("card.expiration", "xxxxxx").query("card.number", "xxxxxxxxxxxxxx").query("channel.id", "xxxxx");
    client.type(MediaType.APPLICATION_FORM_URLENCODED).accept(MediaType.APPLICATION_XML);
    client.header("Content-Type","application/x-www-form-urlencoded");
    Response response = client.get();
    System.out.println(response.getStatus());
于 2016-01-12T22:12:20.713 回答