Можете ли вы написать вызов веб-службы в Coldfusion без использования createObject ("веб-сервис" .... т.е. с использованием Java - PullRequest
0 голосов
/ 20 февраля 2012

Я нашел эту информацию на веб-сайте Adobe: Использование веб-служб, которые ColdFusion не создает . Однако у меня все еще возникают проблемы с аутентификацией с помощью этого веб-сервиса: https://secure.eloqua.com/API/1.2/Service.svc?wsdl

Аутентификация работает, так как мне удалось получить доступ к методам через .Net. Возможно ли, что это веб-сервис, который CF не может обработать?

На сайте Eloqua есть примеры кода для Java, но предполагается, что среда разработки Java использует Netbeans. Можете ли вы обойти вызовы встроенных веб-сервисов CF и сделать это напрямую в Java?

Ответы [ 2 ]

1 голос
/ 19 апреля 2017

Немного опоздал на этот вопрос, но я смог сделать действительные запросы к службе SOAP ws security, построив тело запроса и заголовки вручную в ColdFusion без каких-либо внешних jar-файлов и без непосредственного вызова каких-либо библиотек java.Маркер имени пользователя spec для WSS (Web Services Security) довольно прост.Вы можете сделать что-то похожее на приведенное ниже, чтобы сгенерировать заголовок безопасности и просто добавить его к пользовательской полезной нагрузке SOAP.Ключ генерирует совместимый и уникальный одноразовый номер с каждым запросом вместе с совместимой датой и временем.

Если вам нужна дополнительная информация о сборке и отправке запросов в целом, взгляните на Создание мылаЗапрос веб-службы с ColdFusion и CFHTTP .После того, как вы собрали cfc с различными служебными методами (отправка запроса, создание заголовка безопасности и т. Д.), Нужно создать специальные функции, соответствующие методам API, которые вы хотите вызвать (загрузить wsdl в soapUI, копировать / вставитьтело запроса в вашей функции cfc, при необходимости добавьте аргументы и бизнес-логику, проанализируйте ответ).

<cffunction name="generateSecurityHeader" access="private" returntype="string" output="false">
        <cfset var loc = structNew() />
        <cfsavecontent variable="loc.soapSecurityHeader">
            <cfoutput>
                <soapenv:Header>
                    <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                        <wsse:UsernameToken wsu:Id="UsernameToken-1">
                            <wsse:Username>USERNAME</wsse:Username>
                            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0##PasswordText">PASSWORD</wsse:Password>
                            <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0##Base64Binary">#ToBase64(createUUID())#</wsse:Nonce>
                            <wsu:Created>#Dateformat(Now(),'yyyy-mm-ddThh:mm:ss')#Z</wsu:Created>
                        </wsse:UsernameToken>
                    </wsse:Security>
                </soapenv:Header>
            </cfoutput>
        </cfsavecontent>
        <cfreturn loc.soapSecurityHeader>
    </cffunction>
1 голос
/ 21 февраля 2012

Eloqua использует WS-Security для сообщений SOAP, которые ColdFusion не поддерживает (требуется Axis2).

НО вы можете использовать cfWSAuthenticator Энтони Исраэля-Дэвиса, CFC ColdFusion, чтобы добавить WS-Security к SOAP-запросу -> https://github.com/anthony-id/cfWSAuthenticator

Надеюсь, это поможет.

...