Member 12658724 Ответов: 2

Преобразование java в код C#


У меня есть Java-код.
package com.sp.example;
	import net.sf.json.JSONObject;
	import net.sf.json.JSONSerializer;
	import org.apache.commons.httpclient.HttpClient;
	import org.apache.commons.httpclient.methods.PostMethod;
	import java.io.IOException;
	import java.io.InputStream;
	import java.util.Scanner;
	/**
	* Created with IntelliJ IDEA.
	* User: exampleuser
	* Date: 6/21/13
	* Time: 3:20 PM
	* To change this template use File | Settings | File Templates.
	*/
	public class AccessTokenRetriever {
	public static final String PARAM_CLIENT_ID = 'client_id';
	public static final String PARAM_CLIENT_SECRET = 'client_secret';
	public static final String PARAM_REFRESH_TOKEN = 'refresh_token';
	public static final String PARAM_GRANT_TYPE = 'grant_type';
	public static final String GRANT_TYPE = 'refresh_token';
	private String url;
	private HttpClient httpClient;
	private String responseText;
	public AccessTokenRetriever(String url) {
	this(url, new HttpClient());
	}
	AccessTokenRetriever(String url, HttpClient httpClient) {
	this.url = url;
	this.httpClient = httpClient;
	}
	public String retrieveToken(String clientId, String clientSecret, String refereshToken) {
	PostMethod post = createPost(clientId, clientSecret, refereshToken);
	try {
	httpClient.executeMethod(post);
	responseText = getResponseText(post);
	return getTokenFromResponse();
	} catch (Exception e) {
	throw new RuntimeException(e);
	}
	}
	private PostMethod createPost(String clientId, String clientSecret, String refereshToken) {
	PostMethod post = new PostMethod(url);
	post.setParameter(PARAM_CLIENT_ID, clientId);
	post.setParameter(PARAM_CLIENT_SECRET, clientSecret);
	post.setParameter(PARAM_REFRESH_TOKEN, refereshToken);
	post.setParameter(PARAM_GRANT_TYPE, GRANT_TYPE);
	return post;
	}
	private String getResponseText(PostMethod post) throws IOException {
	InputStream is = post.getResponseBodyAsStream();
	Scanner scanner = new Scanner(is).useDelimiter('A');
	return scanner.hasNext() ? scanner.next() : '';
	}
	private String getTokenFromResponse() throws IOException {
	JSONObject json = (JSONObject) JSONSerializer.toJSON(responseText);
	return json.getString('access_token');
	}
	public static void main(String[] args) {
	String url = 'https://engage1.silverpop.com/oauth/token';
	String clientId = 'XMLAPIDEVQA';
	String clientSecret = 'NOT_FOR_PRODUCTION_USE';
	String refreshToken = 'ac1bfab0-f310-4161-9f6b-53cabac451a8';
	AccessTokenRetriever tokenRetriever = new AccessTokenRetriever(url);
	String accessToken = tokenRetriever.retrieveToken(clientId, clientSecret, refreshToken);
	System.out.println('access_token: ' + accessToken);
	/**
	*
	* In future requests
	*
	* httpHeaders.set('Authorization', 'Bearer ' + accessTokenFor(oauthClientIdentification.value()));
	*
	*/
	}
	}


Я не очень силен на Яве. Я хочу преобразовать его в C#. Не знаете, как это соотносится?

Что я уже пробовал:

Попробуй CodeTranslator: перевод кода из VB.NET <-> C# <-> TypeScript <-> Java[^] Это не очень хорошо работает.

MadMyche

Выглядит довольно просто, некоторые декларации немного отличаются, и у вас там есть только пара пунктов, которые потребовали бы некоторого исследования.

2 Ответов

Рейтинг:
2

RickZeeland

Попробуй вот это: Конвертер Java в C# [^]
Вот вам платная альтернатива: Java/J2EE to .NET Ready-Set-Go - Visual Studio Marketplace[^]


Рейтинг:
16

dnxit

Хотя я не знаю некоторых ваших классов/объектов (PostMethod), но это было бы похоже на что-то вроде ниже

using Newtonsoft.Json;
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
public class AccessTokenRetriever
 {
		public static string PARAM_CLIENT_ID = "c";
		public static string PARAM_CLIENT_SECRET = "c";
		public static string PARAM_REFRESH_TOKEN = "r";
		public static string PARAM_GRANT_TYPE = "g";
		public static string GRANT_TYPE = "r";

		private string _Url;
		private HttpClient _HttpClient;
		private string _ResponseText;

		public AccessTokenRetriever(string url)
		{
			_Url = url;
			_HttpClient = new HttpClient();
		}

		public AccessTokenRetriever(string url, HttpClient httpClient)
		{
			_Url = url;
			_HttpClient = httpClient;
		}

		public async Task<string> RetrieveToken(string clientId, string clientSecret, string refereshToken)
		{
			var post = CreatePost(clientId, clientSecret, refereshToken);

			try
			{
				await _HttpClient.PostAsync(post);
				_ResponseText = GetResponseText(post);

				return GetTokenFromResponse();
			}
			catch (Exception e)
			{
				throw e;
			}
		}

		private PostMethod CreatePost(string clientId, string clientSecret, string refereshToken)
		{
			var post = new PostMethod(_Url);

			post.setParameter(PARAM_CLIENT_ID, clientId);
			post.setParameter(PARAM_CLIENT_SECRET, clientSecret);
			post.setParameter(PARAM_REFRESH_TOKEN, refereshToken);
			post.setParameter(PARAM_GRANT_TYPE, GRANT_TYPE);

			return post;
		}

		private string GetResponseText(PostMethod post)
		{
			var inputStream = post.getResponseBodyAsStream();
			var scanner = (new Scanner(inputStream) + useDelimiter('A'));

			return scanner.hasNext();
			// TODO: Warning!!!, inline IF is not supported ?
		}

		private string GetTokenFromResponse()
		{
			var serializer = new JsonSerializer
			{
				NullValueHandling = NullValueHandling.Ignore
			};

			using (var tr = new StringReader(_ResponseText))
			using (var reader = new JsonTextReader(tr))
			{
				var obj = serializer.Deserialize<string>(reader);
				return obj.getString('a'); // Not sure what the response will be and what you want to read from it  obj.Substring can be used here
			}
		}

		public static void Main(string[] args)
		{
			var url = "h";
			var clientId = "X";
			var clientSecret = "N";
			var refreshToken = "a";
			var tokenRetriever = new AccessTokenRetriever(url);
			var accessToken = tokenRetriever.RetrieveToken(clientId, clientSecret, refreshToken);

			Console.WriteLine($"a{accessToken}");
		}
	}


Afzaal Ahmad Zeeshan

5ed; хотя было бы удивительно, если бы вы могли написать какое-то объяснение для кода, чтобы объяснить преобразование. :-)

Member 12658724

Самое сложное в том что его нет PostMethod в C#.

MadMyche

Затем исследуйте, что делает этот класс, и воссоздайте то, что вам нужно в C#

dnxit

Вы можете использовать HttpWebRequest или веб-клиент для публикации.... как показано ниже

общественного недействительными звоните()
{
var client = новый WebClient();
//var credentials = конвертировать.ToBase64String(Кодировка.ASCII.GetBytes(имя пользователя + ":" + пароль));
//клиент.Заголовки[HttpRequestHeader.Авторизация] = $"Basic {учетные данные}";
//клиент.Headers.Add($"x-api-key:{ApiKey}");
//клиент.Headers.Add("Content-Type:application/json");
var encodedJson = JsonConvert.SerializeObject(/*jSonData*/);

пробовать
{
var response = клиент.UploadString($"{apiurl}", encodedJson);
var response1 = JsonConvert.DeserializeObject<string>(ответ);
}
поймать (исключение бывший)
{
бросок экс;
}
}