Как я могу отменить маркировку значений XML-схемы в Apex?


Я использую веб-сервис SOAP от Apex, который не поддерживает стек SOAP salesforce, поэтому я рассматриваю его как XML через HTTP.

У меня есть значения XML-схемы, такие как dateTime 2008-03-30T00:00:00-05:00, которые мне нужно разобрать в Apex. Есть ли встроенная поддержка или библиотека, которая может это сделать?

1 2

1 ответ:

Для этого нет простого решения, как вы, вероятно, сразу же попытались, Datetime.valueOf() здесь мало помогает, вам придется рассечь строку и составить базовое Datetime, используя 6-params newInstanceGmt статический метод, а затем вызвать addHours/addMinutesчтобы компенсировать часовой пояс.

Даже если мы пренебрегаем губернатором (и я подозреваю, что вы легко столкнетесь с ним, если у вас есть большой набор с большим количеством дат), другие примитивные типы также потребуют специальной обработки, тогда у вас будет набор предопределенных производных типы, и в довершение всего пользовательские производные типы с фасетами. А затем смешать все это вместе, чтобы получить сложные типы. И когда вы все это сделаете, у вас будет собственный стек мыла в Apex:) как я могу убедить вас не делать этого:)

У меня были похожие проблемы, но я даже не хотел рассматривать идею создания пользовательского стека SOAP (у меня уже были огромные проблемы с библиотекой JSON и ограничителем губернатора). Решение, которое я использовал, заключается в установке ASMX "прокси" на сервер компании близко к источнику (хотя это не обязательно MS tech, вы также можете построить тот же прокси с, скажем, Axis), который будет потреблять WSDL в полной силе и переупаковывать операции в детское питание, которое salesforce SOAP может переварить. Даже с отставанием от других веб-сервисов это все равно было лучше, чем ничего.