2016-06-09 5 views
3

Я пытаюсь создать интеграцию с NetSuite через свою платформу WebService (SuiteTalk), но у меня возникают проблемы при сохранении клиента с помощью CustomField.Интеграция NetSuite - проблемы с CustomFieldList

Вот не мой код:

 StringCustomFieldRef customField = new StringCustomFieldRef(); 
     customField.setValue("9999999"); 
     customField.setInternalId("custentity_xx_xxx_xxx"); 

     CustomFieldRef[] customFields = new CustomFieldRef[1]; 
     customFields[0] = customField; 

     Customer customer = new Customer(); 
     customer.setSubsidiary(subs); 
     customer.setIsPerson(true); 
     customer.setFirstName("Joe"); 
     customer.setLastName("Silver"); 
     customer.setCustomFieldList(customFields); 

     _port.add(customer); 

Независимо от того, это всегда тот же ответ:

[Fault Message]: org.xml.sax.SAXException: {urn:core_2016_1.platform.webservices.netsuite.com}CustomFieldRef is an abstract type and cannot be instantiated 

Я делаю так же, как в документации и образцов в справочном центре.

Любые мысли?

Спасибо.

+0

Не должно быть 'setCustomFieldList (новый CustomFieldList (customFields))'? –

+1

Я видел несколько примеров, используя это. Но я не знаю, изменили ли они wsdl, потому что сгенерированный класс теперь получает массив. 'setCustomFieldList (com.netsuite.webservices.platform.core_2016_1.CustomFieldRef [] customFieldList)' – blui

+0

У меня тоже такая же проблема, im портирование с php на java, и это может быть связано с этим https://bugs.php.net /bug.php?id=39179 – Arqu

ответ

0

Синтаксис CustomFieldList изменен в 2014_1. Идентификатор настраиваемого поля должен быть указан в атрибуте scriptId элемента <customField/> вместо поля internalId в вашем примере.

Ручка ruby netsuite bindings должным образом генерирует пользовательский список полей в зависимости от используемой версии API. Если у вас все еще есть проблемы с библиотекой Java, сгенерируйте XML с привязками ruby, чтобы легко определить, где привязки Java могут идти не так.

0

После нескольких дней работы с ним я обнаружил, что Apache Axis имеет проблемы с абстрактными типами, и вы не можете с этим справиться, если вы не можете настроить поведение вашей базы (что не соответствует NS). Проблема в том, что сервер не возвращает тип класса реализации, а тип базового класса при передаче массивов. Однако вы можете построить WSDL по-разному, чтобы обернуть все массивы в списки, которые затем будут работать в соответствии с образцами. В первую очередь флаги -w and -a делают магию.

Вот команда, которую я использовал, чтобы построить свой WSDL:

java -classpath ./axis.jar:commons-logging-1.0.4.jar:commons-discovery-0.2.jar:jaxrpc.jar:wsdl4j-1.5.1.jar:axis-ant.jar:saaj.jar:log4j-1.2.8.jar:activation.jar:javax.mail.jar org.apache.axis.wsdl.WSDL2Java --timeout 180 netsuite.wsdl.xml -a -w -o nswsdlmaster 

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

Смежные вопросы