Nano Hash - криптовалюты, майнинг, программирование

Преобразование параметров клиента JAX-RPC

Я работаю со старомодным веб-сервисом, использующим кодировку RPC.

Моя проблема, похоже, связана с типами XML.

Метод в WSDL:

    <message name="WsPublic_DHT_GetData1Request">
    <part name="ALogin" type="xs:string" /> 
    <part name="Aid" type="xs:int" /> 
    <part name="ARow" type="xs:int" /> 
    <part name="ADt" type="xs:dateTime" /> 
    <part name="ADt2" type="xs:dateTime" /> 
    <part name="Afilter" type="xs:string" /> 
    </message>

Как видите, он использует xs:types.

Теперь давайте посмотрим, как я вызываю его на своем Java-клиенте:

    Object[] argmts = {"USER=PASSWORD", 15089, 10, "2012-02-16 00:00", "2012-02-16 20:01", ""};
    Object lsVal = call.invoke(argmts);

Логин состоит из логина + пароля, разделенных символом '='. Я уже протестировал этот веб-сервис с помощью скрипта vbs, и он работает.

Проблема в том, что при выполнении веб-сервис продолжает возвращать меня: lsVal = Error_login

Учетные данные, которые я использую, в порядке, поэтому я уверен, что это плохое преобразование между строкой java в xs:string. Я попытался определить параметры вызова вручную, но нашел только тип XSD, и он вернул тот же ответ Error_login. Мне интересно, не пропустил ли я что-то. Может кто-нибудь объяснить мне?

Вот полный .java

package com.verallia.testapp;

import javax.xml.namespace.QName;
import javax.xml.rpc.Call;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;
import javax.xml.rpc.encoding.XMLType;

public class JavaApplication1 {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    try {

        // create the Service client object
        // using the wsdl and his service name
        QName serviceName = new QName(
                "IWS_VMS_PUBLIC_DHTservice",
                "VisualManagerWS");
        ServiceFactory factory = ServiceFactory.newInstance();
        Service service = factory.createService(serviceName);

        // Call object
        Call call = service.createCall();

        // operation name
        QName operationName = new QName(
                "http://10.153.14.29:1024/wsdl/IWS_VMS_PUBLIC_DHT", "WsPublic_DHT_GetData");
        call.setOperationName(operationName);

        QName portName = new QName(
                "IWS_VMS_PUBLIC_DHTPort","IWS_VMS_PUBLIC_DHTPort");

        call.setPortTypeName(portName);

        // setting return type
        call.setReturnType(XMLType.XSD_STRING, String.class);

        // specify the RPC-style operation.
        call.setProperty(Call.OPERATION_STYLE_PROPERTY,
                "rpc");
        // and the encoding style
        call.setProperty(
                Call.ENCODINGSTYLE_URI_PROPERTY,
                "http://schemas.xmlsoap.org/soap/encoding/");


        // the target endpoint
        call.setTargetEndpointAddress(
                "http://10.153.14.29:1024/soap/IWS_VMS_PUBLIC_DHT");

        //call.

        // Invoke the method 
        Object[] myArgs = {"WS_TALEND=TALEND", 15089, 10, "2012-02-16 00:00", "2012-02-16 20:01", ""};

        for (Object o : myArgs)
        {
            System.out.println(o.toString());
        }

        Object lsVal = call.invoke(myArgs);
        System.out.println("Returned XML String :  " + lsVal.toString());
    } catch (Throwable th) {
        th.printStackTrace();
    }

  }
}

Ответы:


1

Вы токенизируете значение Alogin на стороне сервера, чтобы получить имя пользователя и пароль? Если это так, то это нормально. Еще одна вещь, вы можете указать типы входных параметров следующим образом в вашем клиентском коде.

 call.addParameter("arg0",XMLType.XSD_STRING, ParameterMode.IN);
  call.addParameter("arg1",XMLType.XSD_INT, ParameterMode.IN);
  call.addParameter("arg1",XMLType.XSD_INT, ParameterMode.IN);
  call.addParameter("arg0",XMLType.XSD_DATETIME, ParameterMode.IN);
  call.addParameter("arg0",XMLType.XSD_DATETIME, ParameterMode.IN);
  call.addParameter("arg1",XMLType.XSD_INT, ParameterMode.IN);
  call.setReturnType(XMLType.XSD_STRING,String.class);

Затем вы можете попытаться вызвать службу, указав все значения в массиве объектов, как вы это сделали. Попробуйте это

06.03.2012
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..