WSDL (англ. Web Services Description Language) — язык описания веб-сервисов и доступа к ним, основанный на языке XML.
После успешной публикаций web сервиса 1С нужно проверить доступность и корректность файла WSDL. Для этого нужно запустить любой браузер по адресу
http://www.ИмяСайта.ru/ПутьНаСайте/ИмяФайла.1cws?wsdl
Например, Запустите работающий сервис сбербанка http://www.cbr.ru/dailyinfowebserv/dailyinfo.asmx?WSDL
Браузер должен отобразить некий файл XML и не выдавать ошибку или пустую страницу или невнятный текст на любой кодировке.
Существуют 2 способа загрузки WSDL файл веб- сервиса в 1С:
- Статическая ссылка (Добавление WS-ссылки 1С ) – WS-ссылки 1С это объект 1С, который расположен в конфигурации в ветке Общие/WS-ссылки 1С. Добавление ссылки на веб сервис производится автоматически. Нажмите правой кнопкой на ветку, выберите Добавить, укажите путь к WSDL описанию веб сервиса. В результате добавления WS-ссылки 1С будет создана автоматически такая же структура, как создается вручную при добавлении Web сервиса.
- Динамическая ссылка ( WsСоединение ) – В этом случае на импорт WSDL в момент создания объекта будет потрачено определенное время
Подробнее о динамических и статических ссылках по материалам из диска ИТС я написал здесь
Часто при загрузке WSDL файл статически (WS-ссылки) или динамически (WsСоединение) может возникать ошибку типа нет соединения с веб сервисом или не верный формат данных в файле WSDL
Особенность загрузки WSDL в 1С в том, что валидные схемы могут не загружаться. Никакого встроенного валидатора нет, поэтому приходится искать ошибку методом деструктивного анализа, последовательно уменьшая количество элементов в схеме.
Веб -программисты используют программу Web Services Validation Tool for WSDL and SOAP для создания, проверки, передачи и приема SOAP-сообщений.
Вот например, файл WSDL( см рис 1) в 1С не загружается и выдается ошибка о неверном формате. Сначала я удалил описание веб-сервиса в XML-редакторе и ничего не получилось, но когда я убрал , все что связано со словами «policies» удалось загружать
I’m programming a SOAP client for an existing soap web service.
I’m using Wildfly8.2 as a server where the client is and JbossWS, JAX-WS
I generated the classes needed to call the service via eclispe with the NEW-> Web service client wizzard
When I call the service I got the error INVALID_WSDL … the stack trace is on the bottom.
The actual problematic service call is the call to «addService» method of the web service.
This is the code that I use to call the service:
SOAP service1 = new SOAP();
WorkflowEditor workflowEditor = service1.getSOAPPort();
AddService parameters = new AddService();
parameters.setLogicalURI(logicalUri);
parameters.setServiceDescription(serviceDescription);
parameters.setServiceType(servicetype.getName());
Specialties specialities = new Specialties();
specialities.getSpecialty().add("aaaa");
parameters.setSpecialties(specialities);
parameters.setWsdlLocation(wsdlLocation);
parameters.setWsdlServiceName(wsdlServiceName);
parameters.setSessionToken(currentUser.getKeystoneSessionToken());
workflowEditor.addService(parameters);
the generated java class for the parameters in the soap call:
package si.arctur.services.workflowEditor;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
})
@XmlRootElement(name = "addService")
public class AddService {
@XmlElement(required = true)
protected String sessionToken;
@XmlElement(required = true)
protected String wsdlLocation;
@XmlElement(required = true)
protected String wsdlServiceName;
@XmlElement(required = true)
protected String logicalURI;
@XmlElement(required = true)
protected String serviceType;
protected AddService.Specialties specialties;
@XmlElement(required = true)
protected String serviceDescription;
public String getSessionToken() {
return sessionToken;
}
public void setSessionToken(String value) {
this.sessionToken = value;
}
public String getWsdlLocation() {
return wsdlLocation;
}
public void setWsdlLocation(String value) {
this.wsdlLocation = value;
}
public String getWsdlServiceName() {
return wsdlServiceName;
}
public void setWsdlServiceName(String value) {
this.wsdlServiceName = value;
}
public String getLogicalURI() {
return logicalURI;
}
public void setLogicalURI(String value) {
this.logicalURI = value;
}
public String getServiceType() {
return serviceType;
}
public void setServiceType(String value) {
this.serviceType = value;
}
public AddService.Specialties getSpecialties() {
return specialties;
}
public void setSpecialties(AddService.Specialties value) {
this.specialties = value;
}
public String getServiceDescription() {
return serviceDescription;
}
public void setServiceDescription(String value) {
this.serviceDescription = value;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"specialty"
})
public static class Specialties {
@XmlElement(required = true)
protected List<String> specialty;
public List<String> getSpecialty() {
if (specialty == null) {
specialty = new ArrayList<String>();
}
return this.specialty;
}
}
}
This is the wsdl copied from the browser:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="WorkflowEditor" targetNamespace="*****************" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wfe="*****************" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<wsdl:types>
<xsd:schema targetNamespace="*****************">
<xsd:element name="addService">
<xsd:complexType>
<xsd:all>
<xsd:element name="sessionToken" type="xsd:string"/>
<xsd:element name="wsdlLocation" type="xsd:string"/>
<xsd:element name="wsdlServiceName" type="xsd:string"/>
<xsd:element name="logicalURI" type="xsd:string"/>
<xsd:element name="serviceType" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="0" name="specialties">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="1" name="specialty" type="xsd:string">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="serviceDescription" type="xsd:string">
</xsd:element>
<xsd:element name="serviceTitle" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="addServiceResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="success" type="xsd:boolean"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="removeService">
<xsd:complexType>
<xsd:all>
<xsd:element name="sessionToken" type="xsd:string"/>
<xsd:element name="serviceURI" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="removeServiceResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="success" type="xsd:boolean"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="addUserToService">
<xsd:complexType>
<xsd:all>
<xsd:element name="sessionToken" type="xsd:string"/>
<xsd:element name="serviceURI" type="xsd:string"/>
<xsd:element name="username" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="addUserToServiceResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="success" type="xsd:boolean"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="removeUserFromService">
<xsd:complexType>
<xsd:all>
<xsd:element name="sessionToken" type="xsd:string"/>
<xsd:element name="serviceURI" type="xsd:string"/>
<xsd:element name="username" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="removeUserFromServiceResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="success" type="xsd:boolean"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="addWorkflow">
<xsd:complexType>
<xsd:all>
<xsd:element name="sessionToken" type="xsd:string"/>
<xsd:element name="workflowDescription_base64" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="addWorkflowResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="success" type="xsd:boolean"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="removeWorkflow">
<xsd:complexType>
<xsd:all>
<xsd:element name="sessionToken" type="xsd:string"/>
<xsd:element name="workflowURI" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="removeWorkflowResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="success" type="xsd:boolean"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="replaceWorkflow">
<xsd:complexType>
<xsd:all>
<xsd:element name="sessionToken" type="xsd:string"/>
<xsd:element name="workflowDescription_base64" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="replaceWorkflowResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="success" type="xsd:boolean"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getWorkflowDescription">
<xsd:complexType>
<xsd:all>
<xsd:element name="sessionToken" type="xsd:string"/>
<xsd:element name="workflowURI" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="getWorkflowDescriptionResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="success" type="xsd:boolean"/>
<xsd:element name="workflowDescription_base64" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getWorkflows">
<xsd:complexType>
<xsd:all>
<xsd:element name="sessionToken" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="getWorkflowsResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="success" type="xsd:boolean"/>
<xsd:element name="workflows">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="workflow" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getServices">
<xsd:complexType>
<xsd:all>
<xsd:element name="sessionToken" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="getServicesResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="success" type="xsd:boolean"/>
<xsd:element name="services">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="service" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getServiceIOs">
<xsd:complexType>
<xsd:all>
<xsd:element name="sessionToken" type="xsd:string"/>
<xsd:element name="serviceURI" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="getServiceIOsResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="success" type="xsd:boolean"/>
<xsd:element name="serviceIOs">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="serviceIO" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getServiceInfo">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="sessionToken" type="xsd:string"/>
<xsd:element name="serviceURI" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getServiceInfoResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="description" type="xsd:string"/>
<xsd:element name="wsdlLink" type="xsd:string"/>
<xsd:element name="title" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getServicesInfo">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="sessionToken" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getServicesInfoResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="success" type="xsd:boolean"/>
<xsd:element name="services">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="service">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="serviceURI" type="xsd:string">
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="0" name="serviceDescription" type="xsd:string">
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="serviceWSDL" type="xsd:string">
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="serviceTitle" type="xsd:string">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="removeWorkflowRequest">
<wsdl:part name="parameters" element="wfe:removeWorkflow">
</wsdl:part>
</wsdl:message>
<wsdl:message name="addWorkflowRequest">
<wsdl:part name="parameters" element="wfe:addWorkflow">
</wsdl:part>
</wsdl:message>
<wsdl:message name="removeUserFromServiceRequest">
<wsdl:part name="parameters" element="wfe:removeUserFromService">
</wsdl:part>
</wsdl:message>
<wsdl:message name="removeServiceRequest">
<wsdl:part name="parameters" element="wfe:removeService">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getServicesRequest">
<wsdl:part name="parameters" element="wfe:getServices">
</wsdl:part>
</wsdl:message>
<wsdl:message name="removeUserFromServiceResponse">
<wsdl:part name="parameters" element="wfe:removeUserFromServiceResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="replaceWorkflowRequest">
<wsdl:part name="parameters" element="wfe:replaceWorkflow">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getServicesInfoRequest">
<wsdl:part name="parameters" element="wfe:getServicesInfo">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getWorkflowDescriptionRequest">
<wsdl:part name="parameters" element="wfe:getWorkflowDescription">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getServicesResponse">
<wsdl:part name="parameters" element="wfe:getServicesResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getServiceIOsResponse">
<wsdl:part name="parameters" element="wfe:getServiceIOsResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getServiceInfoResponse">
<wsdl:part name="parameters" element="wfe:getServiceInfoResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="addUserToServiceResponse">
<wsdl:part name="parameters" element="wfe:addUserToServiceResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="removeWorkflowResponse">
<wsdl:part name="parameters" element="wfe:removeWorkflowResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getWorkflowDescriptionResponse">
<wsdl:part name="parameters" element="wfe:getWorkflowDescriptionResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getServiceInfoRequest">
<wsdl:part name="parameters" element="wfe:getServiceInfo">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getWorkflowsResponse">
<wsdl:part name="parameters" element="wfe:getWorkflowsResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getServiceIOsRequest">
<wsdl:part name="parameters" element="wfe:getServiceIOs">
</wsdl:part>
</wsdl:message>
<wsdl:message name="replaceWorkflowResponse">
<wsdl:part name="parameters" element="wfe:replaceWorkflowResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="addServiceResponse">
<wsdl:part name="parameters" element="wfe:addServiceResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="addUserToServiceRequest">
<wsdl:part name="parameters" element="wfe:addUserToService">
</wsdl:part>
</wsdl:message>
<wsdl:message name="removeServiceResponse">
<wsdl:part name="parameters" element="wfe:removeServiceResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getServicesInfoResponse">
<wsdl:part name="parameters" element="wfe:getServicesInfoResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="addWorkflowResponse">
<wsdl:part name="parameters" element="wfe:addWorkflowResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getWorkflowsRequest">
<wsdl:part name="parameters" element="wfe:getWorkflows">
</wsdl:part>
</wsdl:message>
<wsdl:message name="addServiceRequest">
<wsdl:part name="parameters" element="wfe:addService">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="WorkflowEditor">
<wsdl:operation name="addService">
<wsdl:input message="wfe:addServiceRequest">
</wsdl:input>
<wsdl:output message="wfe:addServiceResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="removeService">
<wsdl:input message="wfe:removeServiceRequest">
</wsdl:input>
<wsdl:output message="wfe:removeServiceResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="addUserToService">
<wsdl:input message="wfe:addUserToServiceRequest">
</wsdl:input>
<wsdl:output message="wfe:addUserToServiceResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="removeUserFromService">
<wsdl:input message="wfe:removeUserFromServiceRequest">
</wsdl:input>
<wsdl:output message="wfe:removeUserFromServiceResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="addWorkflow">
<wsdl:input message="wfe:addWorkflowRequest">
</wsdl:input>
<wsdl:output message="wfe:addWorkflowResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="removeWorkflow">
<wsdl:input message="wfe:removeWorkflowRequest">
</wsdl:input>
<wsdl:output message="wfe:removeWorkflowResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="replaceWorkflow">
<wsdl:input message="wfe:replaceWorkflowRequest">
</wsdl:input>
<wsdl:output message="wfe:replaceWorkflowResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getWorkflowDescription">
<wsdl:input message="wfe:getWorkflowDescriptionRequest">
</wsdl:input>
<wsdl:output message="wfe:getWorkflowDescriptionResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getWorkflows">
<wsdl:input message="wfe:getWorkflowsRequest">
</wsdl:input>
<wsdl:output message="wfe:getWorkflowsResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getServices">
<wsdl:input message="wfe:getServicesRequest">
</wsdl:input>
<wsdl:output message="wfe:getServicesResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getServiceIOs">
<wsdl:input message="wfe:getServiceIOsRequest">
</wsdl:input>
<wsdl:output message="wfe:getServiceIOsResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getServiceInfo">
<wsdl:input message="wfe:getServiceInfoRequest">
</wsdl:input>
<wsdl:output message="wfe:getServiceInfoResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getServicesInfo">
<wsdl:input message="wfe:getServicesInfoRequest">
</wsdl:input>
<wsdl:output message="wfe:getServicesInfoResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="WorkflowEditorSOAP" type="wfe:WorkflowEditor">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="addService">
<soap:operation soapAction="*****************addService"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="removeService">
<soap:operation soapAction="*****************removeService"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="addUserToService">
<soap:operation soapAction="*****************addUserToService"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="removeUserFromService">
<soap:operation soapAction="*****************removeUserFromService"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="addWorkflow">
<soap:operation soapAction="*****************addWorkflow"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="removeWorkflow">
<soap:operation soapAction="*****************removeWorkflow"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="replaceWorkflow">
<soap:operation soapAction="*****************replaceWorkflow"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getWorkflowDescription">
<soap:operation soapAction="*****************getWorkflowDescription"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getWorkflows">
<soap:operation soapAction="*****************getWorkflows"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getServices">
<soap:operation soapAction="*****************getServices"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getServiceIOs">
<soap:operation soapAction="*****************getServiceIOs"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getServiceInfo">
<soap:operation soapAction="*****************getServiceInfo"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getServicesInfo">
<soap:operation soapAction="*****************getServicesInfo"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="SOAP">
<wsdl:port name="SOAPPort" binding="wfe:WorkflowEditorSOAP">
<soap:address location="*******************************"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
The stack trace error:
Caused by: javax.wsdl.WSDLException: WSDLException (at /html): faultCode=INVALID_WSDL: Expected element '{http://schemas.xmlsoap.org/wsdl/}definitions'.
at com.ibm.wsdl.xml.WSDLReaderImpl.checkElementName(Unknown Source)
at com.ibm.wsdl.xml.WSDLReaderImpl.parseDefinitions(Unknown Source)
at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
at org.apache.axis2.description.AxisService.createClientSideAxisService(AxisService.java:2317)
... 29 more
|
#1 |
||
Участник
Регистрация: 18.08.2005 Адрес: Москва |
Вызов веб-сервиса Ax 2012 R3 из 1C 8.2 Друзья, кому-нибудь удавалось вызвать custom веб-сервис, реализованный на стороне Ax из 1С? При указании ссылки на WSDL, 1С выдает ошибку «Неверный формат». Судя по всему Ax генерит либо неправильный либо слишком сложный WSDL. Не удается даже для простейшего сервиса (операция принимает и возвращает строку). Есть какой-то способ изменить формирование этого файла WSDL в Ax? На форумах 1С есть информация, могут не нравится названия некоторых тэгов. Если сравнить с WSDL, генерируемый из Visual Studio, то получается что он сильно отличается от формата Ax.
Последний раз редактировалось Bega; 06.02.2015 в 11:30.
|
||
|
#2 |
Участник Регистрация: 28.11.2005 Адрес: Москва Записей в блоге: 3 |
Судя по тому, что другие системы спокойно «проглатывают» генерируемый Аксаптой WSDL, он генерится правильный и не шибко сложный, скажем, для генерации proxy-классов по нему. Видимо, дело все же в 1С. Может, из 1С дергать не веб-сервисы, а старый добрый .NET Business Connector? С ним тоже есть определенные заморочки, но в целом успешные примеры есть. |
|
#3 |
||
Участник
Регистрация: 18.08.2005 Адрес: Москва |
Цитата: Сообщение от gl00mie Судя по тому, что другие системы спокойно «проглатывают» генерируемый Аксаптой WSDL, он генерится правильный и не шибко сложный, скажем, для генерации proxy-классов по нему. Видимо, дело все же в 1С. Может, из 1С дергать не веб-сервисы, а старый добрый .NET Business Connector? С ним тоже есть определенные заморочки, но в целом успешные примеры есть. Проверил сайтом www.wsdl-analyzer.com и получил предупреждения: «другие системы» — это какие? мне конечно удалось вызвать из Ax2009 и Visual Studio, ног это все microsoft. WSDL этот ядром генерится или есть где-то код на X++? |
||
|
#4 |
||
Участник
Регистрация: 30.03.2005 Адрес: Київ-København-Düsseldorf |
Попробуйте создать в Visual Studio прокси dll и вызывать ее методы из 1С. |
||
|
#5 |
||
Участник
Регистрация: 18.08.2005 Адрес: Москва |
Цитата: Сообщение от Morpheus Попробуйте создать в Visual Studio прокси dll и вызывать ее методы из 1С. Да это понятно, но некрасиво. |
||
|
#6 |
Участник Регистрация: 06.03.2007 Адрес: москва |
WSDL возвращает SOAP сервис. Данные по binding он берет из настроек app.config или web.config. X++: AifServiceConfigGenerator X++: AifServiceGenerationManager
Последний раз редактировалось maldini; 06.02.2015 в 12:31.
|
За это сообщение автора поблагодарили: Bega (5). |
|
#7 |
Участник Регистрация: 28.11.2005 Адрес: Москва Записей в блоге: 3 |
Цитата: Сообщение от Bega Цитата: Сообщение от Morpheus Попробуйте создать в Visual Studio прокси dll и вызывать ее методы из 1С. Да это понятно, но некрасиво. С каких это пор? |
|
#8 |
||
Участник
Регистрация: 13.01.2006 Адрес: Республика Татарстан, г. Казань |
Встречался в 1С с проблемой, когда в WSDL-описании было зацикливание директив импорта. Другие приложения «кушают» это нормально, 1С не умеет. Можно попробовать сохранить WSDL-описание в файл, почистить ручками и в 1С его скормить, дальше попробовать подергать методы сервиса, может поможет. Сталкивался с этой проблемой на платформе 8.2, на 8.3 не пробовал, может починили.
__________________ |
||
За это сообщение автора поблагодарили: Bega (3). |
|
#9 |
||
Участник
Регистрация: 18.08.2005 Адрес: Москва |
Цитата: Сообщение от gl00mie С каких это пор? Дополнительный программный код и его поддержка. И зачем тогда декларируемая Ax система интеграции через web-сервисы. |
||
21 / 21 / 3 Регистрация: 22.04.2014 Сообщений: 112 |
|
1 |
|
17.08.2015, 12:21. Показов 4980. Ответов 6
Здравствуйте, проблема такая есть веб сервис https://4totam.4totam.ru/4/WsAgents.svc?wsdl. Когда пытаюсь загрузить данные с этого этого файла пишет «неверный формат»(загружал через WS-ссылки). Посмотрел файл вроде как обычный. Но потом оказалось он несколько модифицированный. Подскажите как быть? Хотелось бы через WS-ссылки сделать, но есть еще com Объект( через него работает 100%). Погуглил говорили чисто программно можно обращаться и передавать данные.. Может кто сталкивался?
__________________
0 |
SPR1TE89 21 / 21 / 3 Регистрация: 22.04.2014 Сообщений: 112 |
||||||||
19.08.2015, 09:32 [ТС] |
2 |
|||||||
Получилось загрузить обертку веб сервис, но теперь другая проблема
Когда передаю сертификат он так ругается, когда даю системе выбрать сертификат ругается так
Через браузер с этим сертификатом захожу все хорошо. Но вот когда к методам обращаюсь вылетают такие ошибки. Куда копать то?
0 |
340 / 315 / 43 Регистрация: 20.08.2014 Сообщений: 1,242 Записей в блоге: 1 |
|
19.08.2015, 10:31 |
3 |
SPR1TE89, платформа, может быть в свежем релизе поправили чего-нить с ssl
0 |
21 / 21 / 3 Регистрация: 22.04.2014 Сообщений: 112 |
|
19.08.2015, 10:38 [ТС] |
4 |
1c-k, Платформа 8.3.6.2041. Более менее свежая.
0 |
340 / 315 / 43 Регистрация: 20.08.2014 Сообщений: 1,242 Записей в блоге: 1 |
|
19.08.2015, 10:41 |
5 |
{http://tempuri.org/}:WsAgentsService:CheckAuthority(): Ошибка HTTP: *HTTP Status (403). У меня конечно странный вопрос, но почему HTTP вместо HTTPS?
0 |
21 / 21 / 3 Регистрация: 22.04.2014 Сообщений: 112 |
|
19.08.2015, 10:53 [ТС] |
6 |
1c-k, WSDL такой у него target name space прописан http://tempuri.org/ . Но обращается он к https://4totam.4totam.ru/4/WsAgents.svc. В отладчике в wsПрокси.ТочкаСоединения такой адрес : https://4totam.4totam.ru/4/WsAgents.svc. Может дело в кривом wsdl нике? Просто в нем прописаны такие тэги связанные с сертификатом. Их пришлось удалить, чтоб просто загрузить обертку веб сервиса. НО все остальные пакеты и вебсервис, загрузились нормально без ошибок. А изначально когда грузил WSDL вылетала ошибка, неверный формат….
0 |
340 / 315 / 43 Регистрация: 20.08.2014 Сообщений: 1,242 Записей в блоге: 1 |
|
19.08.2015, 11:43 |
7 |
Может дело в кривом wsdl нике? может в нём, тут я не подскажу.
0 |
Помогите пожалуйста, не могу разобраться. Есть веб сервис сторонний, подключаюсь к нему через 1с на последней строчке выдает ошибку: {Форма.Форма.Форма}: Метод объекта не обнаружен (addComment) Proxy.addComment(«tasks»,45578,»Тест»,»ACCOUNTING»,»»); В чем может быть дело. Из других систем этот метод работает
Прошу прощения. Это к 1С. Для сторонних может быть не так. Хотя кроме АдресВэбСервиса должно быть одинаково. Смотри в отладчике
В отладчике у меня есть только одна точка подключения, ее я и прописываю в Новый WSПрокси, если вызываю с окончанием soap, она ругается что порт не найден
Пробовала и «ПутьКМоемуСервису?wsdl» и «ПутьКМоемуСервису разницы нет
Проверь имя метода по wsdl
создай в пустой конфе WSСсылку, закинь в нее свой wsdl и посмотри, какие методы 1Ска распознает
Если подумать, то ПутьКМоемуСервису?wsdl забив в браузер ты увидишь описание web-сервиса….
web-сервисы чувствительны к регистру букв.
создай в пустой конфе WSСсылку, закинь в нее свой wsdl и посмотри, какие методы 1Ска распознает Она ругается, что формат неверен, в каком формате нужно указывать url
а в браузере открывается?
Путь у меня ПутьКМоемуСервису.xml?wsdl
открывается в xml формате
Есть веб сервис сторонний — как правило, в виде URI…
Пишет что неверный формат, может нужно каку-нибудь библитеку подгрузить?
:)))))))))))))))))))))))))))))))))))))))))))
адрес сервера секретный такой что ли?
значит не судьба с этим сервисом из 1Ски поработать. SOAP он такой SOAP, слишком вольно местами трактуемый
Адрес стороннего web-сервиса какой?
Да не нужен мне твой сервант, сама проверь, открывается ли в браузере wsdl-ка
Если там еще и https то вообще песня
открывая ПутьКМоемуСервису.xml?wsdl я получаю тоже что и когда пишу ПутьКМоемуСервису.xml
использовать платформу 8.3 в качестве ws2ws-proxy :)))
ТС, у меня была схожая ситуация, вот статья с моими изысканиями:
И что получаешь? *уже просто интересно*
В моем случае это не помогло(сторонний веб сервис был на Oracle Fusion Middlewere)
без разницы. Можно использовать любое MQ с поддержкой SOAP в качестве ws2ws-proxy
Ну не можешь и не можешь. Короче, ты описание сервиса через обычный браузер видишь?
Ищи метод addComment и смотри что он должен получить.
<part name=»type» type=»xsd:string»/><part name=»id» type=»xsd:int»/><part name=»comment» type=»xsd:string»/><part name=»user» type=»xsd:string»/><part name=»attachments» type=»soap-enc:Array»/>
MQ = Message Queue, например, RabbitMQ
это параметры метода addcomment
Метод в том пространстве имен?
>>Из других систем этот метод работает Из каких других, 1С или что-то иное?
на той же машине, что и сервер 1С?
ты с регистром имя метода точно не путаешься, дело в том, что метод addcomment из и addComment из с точки зрения SOAP — разные
на perl имя метода как звучит?
на perl они вызывают my $obj = $soap->addComment( $tw_type, $tw_id, $tw_comment, $tw_user, $tw_attachments );
у сервиса есть эхо-метод?
в скорее всего ошибка. в perl пространство имен и прочее статично или дергает из определения?
обычно метод echo реализуют у сервисов для диагностики связи.
Можешь создать класс на Net для подключения вэб сервиса а затем через вот этот прокиси подключить его как ком
+ в передача параметров неправильная согласно : и. т. п.
Да там в создании WSProxy косяк, ИМХО
1ска же нормально преобразует в xml примитивные типы, мне кажется, это излишество
с фабрикой я тоже пробовала, но проблема именно в том что 1с-ка не видит этот метод
Проблема в создании WSProxy
Причина? Ты не знаешь статично оно в perl или динамично?
проблема в том, что wsdl скорее всего не соответствует спецификации. из-за чего 1Ска не может преобразовать его в XTDO.
ИМХО, там она просто из другого пространства имен цепляет.
Для сложных и included type есть такая фича
URIПространстваИмен и прочее точно соответсвует определению?
сервис на закрытом порту?
а то играем в «Угадай мелодию»….
Для anyType нужно явное создание типа. Но в данном случае ругается на метод. Если же в она WS ссылку не может загрузить, то возможно, что 1С не понимает. Если бы была ссыдка можно было бы проверить
</portType> <binding name=»Binding» type=»tns:WSСервис.ИмяТочкиПодключения»><soap:binding style=»rpc» transport=»http://schemas.xmlsoap.org/soap/http»/><operation name=»addComment»></operation></binding> <service name=»Сервис»><port name=»WSСервис.ИмяТочкиПодключения» binding=»tns:Binding»><soap:address location=»URIПространстваИмен»/></port></service><message name=»addCommentIn»><part name=»type» type=»xsd:string»/><part name=»id» type=»xsd:int»/><part name=»comment» type=»xsd:string»/><part name=»user» type=»xsd:string»/><part name=»attachments» type=»soap-enc:Array»/></message> Что типа этого, в чем может быть ошибка
и закрывается все </definitions>
Я давно разочаровался в 1с-овском SOAP. Сплошь и рядом продвинутые веб-сервисы юзают SOAP шире, чем его поддерживает 1С. В итоге 1С их «не понимает».
Вы статью читали, ссылку на которую я давал в самом начале? Делайте как там.
Сохрани WSDL-описание в xml-файл, и загрузи WSссылку, если будет ошибка «неверный формат», значит надо редактировать xml. Я так раздел за разделом отлаживал. Еще проверь веб-сервис на валидность, можно через сайт
Хорошая идея. Я тоже как-то было так отлаживал. Избавлял от циклических ссылок в пространствах имен (1С этого не переваривает). Думал, что победа близка. wsdl успешно загрузился. А потом выяснилось, что сервис использует хитрый способ авторизации через установку каких-то заголовков (подробности уже плохо помню), а 1С эту фигню не поддерживает. Было очень обидно.
файл сохранила, пишет что неверный формат, можно ли какой-нибудь прогой его проверить. Сайт не подходит
Может кто знает, что может не нравиться в wsdl 1с, почему она может писать неверный формат?
и что такое циклические ссылки в пространствах имен
SoapUI тебе в помощь. невалидный wsdl
wsdl валидный, я отправляла запрос с помощью soap-клиента, все нормально отрабатывает
дело именно в 1с, ей что-то не нравиться(
Нашла))))) Может кому поможет: ошибка была в том что в узле <portType name=»WSСервис.ИмяТочкиПодключения»><operation name=»Com»><documentation>яяя</documentation><input message=»tns:addCommentIn»/></operation> не было выходного <output message=»tns:addCommentIn»/> и в самом начале было просто <?xml version=’1.0′?>, я поставила <?xml version=’1.0′ encoding=’UTF-8′?>
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
Автор | Сообщение |
---|---|
Тема: Re:Интеграция с 1С |
|
Андрей Любимов
Зарегистрирован: 17/10/2017 16:58:56 Оффлайн
|
Мне просто интересно. На кой в IncomingOperation элементы consignment и vetCertificate имеют списочный тип, ЕСЛИ ТУДА ВСЕ РАВНО МОЖНО ЗАПИХАТЬ ТОЛЬКО ПО ОДНОМУ ЭЛЕМЕНТУ? |
|
|
Тема: Re:Интеграция с 1С |
|
anig99
Зарегистрирован: 21/10/2016 20:05:29 Оффлайн
|
Решил. http://api.vetrf.ru/schema/platform/services/2.0-RC-last/ams-mercury-g2b.service_v2.0_pilot.wsdl вообще не нужен. Вместо него достаточно ApplicationManagementService_v1.1.wsdl программно или как wsdl ссылку в конфигурацию. Спасибо mevgenym за его код https://github.com/mevgenym/1c_vetis.api Для получения Фабрики нужно использовать такой код: Не понятно как влияет, но ЗапросWeb = Новый HTTPЗапрос(«platform/services/ApplicationManagementService»); использовал ЗапросWeb = Новый HTTPЗапрос(«platform/services/2.0/ApplicationManagementService»); Вроде работает и так, и так. serviceID поменять с mercury-g2b.service на mercury-g2b.service:2.0 |
|
|
Тема: Re:Интеграция с 1С |
|
nifor
Зарегистрирован: 21/04/2017 04:01:50 Оффлайн
|
Коллеги добрый день !!! Подскажите у кого то посредством 1С получилось заполнить атрибуты id и for (api 2.0) ? При заполнении строковым типом ругается на неверный формат при отправке запроса !!! Это сообщение было редактировано 1 раз. Последнее обновление произошло в 16/11/2017 11:22:29 |
|
|
Тема: Re:Интеграция с 1С |
|
vvche
Зарегистрирован: 13/06/2016 19:39:45 Оффлайн
|
Подчеркивание впереди прицепите. Там базовый тип «NCName», а он должен содержать первым символом или букву или подчеркивание. |
|
|
Тема: Re:Интеграция с 1С |
|
vvche
Зарегистрирован: 13/06/2016 19:39:45 Оффлайн
|
Вот не пойму, в чем косяк. Формирую ProcessIncomingConsignmentOperation в версии 2,0.
При сохранении XML с помощью ФабрикиXDTO «перепрыгивают» реквизиты.
И вот эти issueDate и issueNumber, относящиеся к vetCertificate, почему-то уезжают вниз, хотя должны идти следом за issueSeries.
Грешил на релиз платформы, но на 8.3.8 , 8.3.9 , 8.3.10 результат одинаков. |
|
|
Тема: Re:Интеграция с 1С |
|
nifor
Зарегистрирован: 21/04/2017 04:01:50 Оффлайн
|
Спасибо огромное !!! |
|
|
Тема: Re:Интеграция с 1С |
|
vvche
Зарегистрирован: 13/06/2016 19:39:45 Оффлайн
|
Сам спросил, сам ответил
При импорте схемы document_v2.0.xsd 1С выставила в типе объекта VetDocument свойство «Упорядоченный» в «Ложь», отсюда и косяк. |
|
|
Тема: Re:Интеграция с 1С |
|
ashugaenko
Зарегистрирован: 28/02/2017 11:51:59 Оффлайн
|
. Это сообщение было редактировано 1 раз. Последнее обновление произошло в 17/11/2017 16:38:37 |
|
|
Тема: Re:Интеграция с 1С |
|
mevgenym
Зарегистрирован: 19/05/2017 14:03:42 Оффлайн
|
Появилась обратная «совместимость» с 1.4 по упаковкам (смотрел через getStockEntryChangesList): — непонятно по каким соображениям назначился уровень и он разный — почти все без количества и количество так и не соответствует 1.4 |
https://github.com/mevgenym/1c_vetis.api_v1.1 https://github.com/mevgenym/1c_vetis.api |
|
|
|
Тема: Re:Интеграция с 1С |
|
FCool
Зарегистрирован: 21/11/2017 16:50:37 Оффлайн
|
Добрый день. Вопрос по API 2 Пытаюсь создать предприятие методом ModifyEnterpriseOperation
Определение = Новый WSОпределения(«http://api.vetrf.ru/schema/platform/services/2.0-RC-last/ams-mercury-g2b.service_v2.0_pilot.wsdl»); modifyEnterpriseRequest = Фабрика.Создать(Фабрика.Тип(«http://api.vetrf.ru/schema/cdm/mercury/g2b/applications/v2», «ModifyEnterpriseRequest»));;
ApplicationDataWrapper.Добавить(ФормаXML.Элемент,»http://api.vetrf.ru/schema/cdm/mercury/g2b/applications/v2″, «ModifyEnterpriseRequest», modifyEnterpriseRequest);
SubmitApplicationRequest.apiKey = «***********************»; Результат = ПодключениеОбмена.submitApplicationRequest(SubmitApplicationRequest.apiKey, SubmitApplicationRequest.application);
Вылезает такая ошибка: Может кто подскажет, что я делаю не так ? |
|
|
Тема: Интеграция с 1С |
|
RomanWBD
Зарегистрирован: 12/05/2016 11:36:01 Оффлайн
|
Все делаете так, а вот шлюз API 2.0 с тестовым Меркурием явно работает не так. Сейчас по этому сервису в ответе всегда возвращается ошибка по любому сервису из ams-mercury-g2b.service_v2.0_pilot.wsdl. |
|
|
Тема: Интеграция с 1С |
|
FCool
Зарегистрирован: 21/11/2017 16:50:37 Оффлайн
|
Использовать API v1 ? |
|
|
Тема: Re:Интеграция с 1С |
|
Андрей Любимов
Зарегистрирован: 17/10/2017 16:58:56 Оффлайн
|
Здравствуй! Операцию не получится сделать через прокси. У них в WS определении нет типов, связанных с операциями. Запрос нужно делать через HTTP. Тут примерно описано: http://vetrf.ru/vetrf-forum/posts/listByUser/9167.page |
|
|
Тема: Интеграция с 1С |
|
RomanWBD
Зарегистрирован: 12/05/2016 11:36:01 Оффлайн
|
1.4 вроде работает, проверял как раз после того как 2.0 перестал отправлять нормальные результаты. |
|
|
Тема: Интеграция с 1С |
|
GusVal
Зарегистрирован: 10/11/2017 12:14:53 Оффлайн
|
А API 2.0 насколько тестовое?
Вообще-то им бы следовало об этом большими буквами да на главной странице форума… |
|
|
|