I am trying to generate Apex classes from a wsdl file.but i am facing a problem...
Apex Generation Failed
Unable to find schema for element; {http://www.w3.org/2001/XMLSchema}string
Can you please help on that.
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://eapisws.cbp.dhs.gov/ws/manifest1_0/" xmlns:mns="http://eapisws.cbp.dhs.gov/ws/manifest1_0/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<wsdl:types>
<xs:schema targetNamespace="http://eapisws.cbp.dhs.gov/ws/manifest1_0/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mns="http://eapisws.cbp.dhs.gov/ws/manifest1_0/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1_0">
<xs:annotation>
<xs:documentation xml:lang="en">
This is the first release of WSDL file for the APIS FlightManifest Batch Web Service and it is subject to change.
</xs:documentation>
</xs:annotation>
<xs:element name="flightManifest" nillable="false">
<xs:annotation>
<xs:documentation xml:lang="en">Valid UN-EDIFACT document</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="2097152"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="certificationFlightManifest" nillable="false">
<xs:annotation>
<xs:documentation xml:lang="en">Valid UN-EDIFACT document to be certified/validated</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="2097152"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="submissionResponse" nillable="true" type="xs:string"/>
</xs:schema>
</wsdl:types>
<wsdl:message name="flightManifestRequest">
<wsdl:part element="mns:flightManifest" name="flightManifest"/>
</wsdl:message>
<wsdl:message name="certificationFlightManifestRequest">
<wsdl:part element="mns:certificationFlightManifest" name="certificationFlightManifest"/>
</wsdl:message>
<wsdl:message name="flightManifestResponse">
<wsdl:part element="mns:submissionResponse" name="submissionResponse"/>
</wsdl:message>
<wsdl:portType name="EapisManifest">
<wsdl:operation name="submitFlightManifest">
<wsdl:input message="mns:flightManifestRequest" name="flightManifestRequest"/>
<wsdl:output message="mns:flightManifestResponse" name="flightManifestResponse"/>
</wsdl:operation>
<wsdl:operation name="submitCarrierCertificationRequest">
<wsdl:input message="mns:certificationFlightManifestRequest" name="certificationFlightManifestRequest"/>
<wsdl:output message="mns:flightManifestResponse" name="flightManifestResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="EapisManifestSoapBinding" type="mns:EapisManifest">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="submitFlightManifest">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="flightManifestRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="flightManifestResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="submitCarrierCertificationRequest">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="certificationFlightManifestRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="flightManifestResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="EapisManifestService">
<wsdl:port binding="mns:EapisManifestSoapBinding" name="EapisManifest">
<wsdlsoap:address location="https://eapisws.cbp.dhs.gov/apis/eapisws1_0/services/EapisManifest"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
The answer to the problem is mentioned in the comment made regarding changing the submission response element from a simple type to a complex type as mentioned in the link.
Related
I want to extract complex XML data to SQL server. Already tried SSIS package with no success. What do I change in my code to desired output
I have tried below T-SQL
DECLARE #xmlData XML
SET #xmlData = (
SELECT CONVERT(XML, BulkColumn) AS BulkColumn
FROM OPENROWSET(BULK 'C:..\NewTextDocument.xml', SINGLE_BLOB) as x
)
SELECT
ref.value('FilterID[1]', 'int') AS FilterID ,
ref.value('Name[1]', 'NVARCHAR (255)') AS Name ,
ref.value('Code[1]', 'NVARCHAR (255)') AS Code ,
ref.value('Department[1]', 'NVARCHAR (255)') AS Department
FROM #xmlData.nodes('DataSet/Export/Test')
xmlData( ref )
My XML is in below format
<?xml version="1.0" encoding="ISO-8859-1"?>
<DataSet>
<xs:schema id="Export" xmlns:msdata="urn:schemas-microsoft-com:xml-
msdata" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="">
<xs:element msdata:Locale="" msdata:IsDataSet="true" name="Export">
<xs:complexType>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element name="Test">
<xs:complexType>
<xs:sequence>
<xs:element name="FilterID" minOccurs="0" type="xs:int"/>
<xs:element name="Name" minOccurs="0" type="xs:string"/>
<xs:element name="Code" minOccurs="0" type="xs:string"/>
<xs:element name="Department" minOccurs="0" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<Export>
<Test diffgr:id="Test1" msdata:rowOrder="0">
<FilterID>1</FilterID>
<Name>John</Name>
<Code>123</Code>
<Department>Science</Department>
</Test>
<Test diffgr:id="Test2" msdata:rowOrder="1">
<FilterID>2</FilterID>
<Name>Jay</Name>
<Code>321</Code>
<Department>Maths</Department>
</Test>
</Export>
Expected Output
FilterID | Name | Code | Department
------------------------------------
1 | John | 123 | Science
2 | Jay | 321 | Maths
Resolved, I was able to query data by modifying from clause in above code
FROM #xmlData.nodes('DataSet/Export/Test')
to
FROM #xmlData.nodes('//Export/Test')
i created a sample apache cxf SOAP webservices, following the tutorial here
i'm able to run on tomcat 9 via eclipse neon and access it at http://localhost:8080/camel-example-reportincident/webservices/incident?wsdl.
i installed and started it on websphere, but i can't access it on the same url. i also tried all other ports listed in default host alias.
my maven libraries:
here is my wsdl:
<?xml version="1.0" encoding="ISO-8859-1"?> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://reportincident.example.camel.apache.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://reportincident.example.camel.apache.org">
<!-- Type definitions for input- and output parameters for webservice
--> <wsdl:types> <xs:schema targetNamespace="http://reportincident.example.camel.apache.org"> <xs:element name="inputReportIncident">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="incidentId" />
<xs:element type="xs:string" name="incidentDate" />
<xs:element type="xs:string" name="givenName" />
<xs:element type="xs:string" name="familyName" />
<xs:element type="xs:string" name="summary" />
<xs:element type="xs:string" name="details" />
<xs:element type="xs:string" name="email" />
<xs:element type="xs:string" name="phone" />
</xs:sequence>
</xs:complexType> </xs:element> <xs:element name="outputReportIncident">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="code" />
</xs:sequence>
</xs:complexType> </xs:element> </xs:schema> </wsdl:types>
<!-- Message definitions for input and output --> <wsdl:message name="inputReportIncident"> <wsdl:part name="parameters" element="tns:inputReportIncident" /> </wsdl:message> <wsdl:message name="outputReportIncident"> <wsdl:part name="parameters" element="tns:outputReportIncident" /> </wsdl:message>
<!-- Port (interface) definitions --> <wsdl:portType name="ReportIncidentEndpoint"> <wsdl:operation name="ReportIncident"> <wsdl:input message="tns:inputReportIncident" /> <wsdl:output message="tns:outputReportIncident" /> </wsdl:operation> </wsdl:portType>
<!-- Port bindings to transports and encoding - HTTP, document literal encoding is used --> <wsdl:binding name="ReportIncidentBinding" type="tns:ReportIncidentEndpoint"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="ReportIncident"> <soap:operation
soapAction="http://reportincident.example.camel.apache.org/ReportIncident"
style="document" /> <wsdl:input>
<soap:body parts="parameters" use="literal" /> </wsdl:input> <wsdl:output>
<soap:body parts="parameters" use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding>
<!-- Service definition --> <wsdl:service name="ReportIncidentService"> <wsdl:port name="ReportIncidentPort" binding="tns:ReportIncidentBinding"> <soap:address location="http://reportincident.example.camel.apache.org" /> </wsdl:port> </wsdl:service>
</wsdl:definitions>
here is my ibm-web-bnd.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-bnd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://websphere.ibm.com/xml/ns/javaee"
xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_0.xsd" version="1.0"> <virtual-host name="default_host"/> </web-bnd>
here is my cxf-config.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<!-- implementation of the webservice -->
<bean id="reportIncidentEndpoint"
class="org.apache.camel.example.reportincident.impl.ReportIncidentEndpointImpl" />
<!-- export the webservice using jaxws -->
<jaxws:endpoint id="reportIncident" implementor="#reportIncidentEndpoint"
address="/incident" wsdlLocation="/WEB-INF/wsdl/report_incident.wsdl"
endpointName="s:ReportIncidentPort" serviceName="s:ReportIncidentService"
xmlns:s="http://reportincident.example.camel.apache.org" />
</beans>
here is my web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Archetype Created Web Application</display-name>
<!-- the listener that kick-starts Spring -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- CXF servlet -->
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- all our webservices are mapped under this URI pattern -->
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webservices/*</url-pattern>
</servlet-mapping>
<!-- location of spring xml files -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:cxf-config.xml</param-value>
</context-param>
</web-app>
====================
Update
strangely, the last update for SystemOut.log and SystemErr.log were two days ago. i found some logs in C:\Program Files (x86)\IBM\WebSphere\AppServer\profiles\AppSrv01\logs\ffdc
logs:
FFDC Exception:org.springframework.beans.factory.BeanCreationException SourceId:com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated ProbeId:1341 Reporter:com.ibm.ws.webcontainer.webapp.WebAppImpl#bdd2e142
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cxf' defined in class path resource [META-INF/cxf/cxf.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.cxf.bus.spring.SpringBus]: Constructor threw exception; nested exception is org.apache.cxf.bus.extension.ExtensionException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1039)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:985)
.....
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.cxf.bus.spring.SpringBus]: Constructor threw exception; nested exception is org.apache.cxf.bus.extension.ExtensionException
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1032)
Caused by: java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version; class=org/apache/camel/component/cxf/transport/CamelTransportFactory, offset=6
at java.lang.ClassLoader.defineClassImpl(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:273)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:74)
com.ibm.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I: FFDC Incident emitted on C:\Program Files (x86)\IBM\WebSphere\AppServer\profiles\AppSrv01\logs\ffdc\server1_24638c34_17.05.05_01.11.23.0597458986526819616127.txt com.ibm.ws.webcontainer.servlet.ServletInstance.init 181
com.ibm.ws.webcontainer.VirtualHostImpl addWebApplication SRVE0250I: Web Module Archetype Created Web Application has been bound to default_host[*:9080,*:80,*:9443,*:5060,*:5061,*:443].
WSVR0221I: Application started: camel-example-reportincident_war
WSVR0191I: Composition unit WebSphere:cuname=camel-example-reportincident_war in BLA WebSphere:blaname=camel-example-reportincident_war started.
An UnsupportedClassVersionError means that the class (in this case, CamelTransportFactory) was compiled against a higher level of Java than the JVM that you're running on. If you have a version of WebSphere that supports higher Java spec levels, you'll need to pick up a higher-level JDK; if not, then you'll need a version of the Camel package that supports Java 6.
I want to call wsdl service (created by dataflux data management studio )from my angular application.
I had already referred to the post
1) AngularJS - SOAP Service Integration With AngularJS Model
2) Simplest SOAP example
3) How to consume a SOAP WebService with AngularJS?
I am using soapclient.js and angular.soap.js
It is giving this error:
Uncaught TypeError: Cannot read property 'constructor' of null
soapCallback # angular.soap.js:16
SOAPClient._onSendSoapRequest # soapclient.js:214
xmlHttp.onreadystatechange # soapclient.js:187
My code in controller:
$scope.getData = function(){
soapService.DMService().then(function(response){
$scope.response = response;
});
}
In app.js,
app.factory("soapService", ['$soap',function($soap){
var base_url = "http://myserver:9000/WSDL_Web_Service/service__DashBoard.WSDL";
return {
DMService: function(){
return $soap.post(base_url,"procsvc_service__DashBoard.djf");
}
}
}]);
My wsdl service : service__Dashboard.WSDL
`
<?xml version="1.0"?>
<definitions name="DMService"
targetNamespace="http://archserver.wsdl.dataflux.com"
xmlns:tns="http://archserver.wsdl.dataflux.com"
xmlns:archxsd="archserver.xsd.dataflux.com"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:MIME="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:DIME="http://schemas.xmlsoap.org/ws/2002/04/dime/wsdl/"
xmlns:WSDL="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<schema
targetNamespace="archserver.xsd.dataflux.com"
xmlns:tns="archserver.xsd.dataflux.com"
xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="unqualified"
attributeFormDefault="unqualified">
<complexType name="request">
<sequence>
</sequence>
</complexType>
<element name="procsvc_service__DashBoard.djf_in" type="tns:request"/>
<complexType name="response">
<sequence>
<element name="result" type="xsd:string" minOccurs="0" maxOccurs="1"/>
</sequence>
</complexType>
<element name="procsvc_service__DashBoard.djf_out" type="tns:response"/>
</schema>
</types>
<message name="procsvc_service__DashBoard.djf_in">
<part name="body" element="archxsd:procsvc_service__DashBoard.djf_in"/>
</message>
<message name="procsvc_service__DashBoard.djf_out">
<part name="body" element="archxsd:procsvc_service__DashBoard.djf_out"/>
</message>
<portType name="DataManagementServicePortType">
<operation name="procsvc_service__DashBoard.djf_in">
<documentation></documentation>
<input message="tns:procsvc_service__DashBoard.djf_in"/>
<output message="tns:procsvc_service__DashBoard.djf_out"/>
</operation>
</portType>
<binding name="DataManagementService" type="tns:DataManagementServicePortType">
<SOAP:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="procsvc_service__DashBoard.djf_in">
<SOAP:operation soapAction="service__DashBoard.djf*1*57195B25CE0B6D37"/>
<input>
<SOAP:body use="literal"/>
</input>
<output>
<SOAP:body use="literal"/>
</output>
</operation>
</binding>
<service name="DMService">
<documentation>Data Management Server</documentation>
<port name="DMService" binding="tns:DataManagementService">
<SOAP:address location="http://someserver:21000"/>
</port>
</service>
</definitions> `
changes in soapclient.js (in method SOAPClient._onSendSoapRequest on line 201 ):
var nd = SOAPClient._getElementsByTagName(req.responseXML, method + **"_in"**);
if(nd.length == 0)
nd = SOAPClient._getElementsByTagName(req.responseXML, "return");
I feel, I might be calling the wsdl method in wrong way, but not able to figure out how it should be. If anybody can throw more light on how it should be done...it would be great
Thanks...
I m getting the following response from the webservice
<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><GetUserResponse xmlns="urn:wwservice"><userDetails xmlns="">Successfully write a web service hurray</userDetails></GetUserResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
But I getting Apex type not found for element : userDetails
Here's my wsdl file
<?xml version="1.0" encoding="ISO-8859-1"?>
<definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:wwservice" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="urn:wwservice">
<types>
<xsd:schema elementFormDefault="qualified" targetNamespace="urn:wwservice">
<xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/>
<xsd:complexType name="GetUserRequestType">
<xsd:all>
<xsd:element name="Username" type="xsd:string" form="unqualified"/>
<xsd:element name="Password" type="xsd:string" form="unqualified"/>
</xsd:all>
</xsd:complexType>
<xsd:complexType name="GetUserResponseType">
<xsd:all>
<xsd:element name="userDetails" type="xsd:string" form="unqualified"/>
</xsd:all>
</xsd:complexType>
<xsd:element name="GetUser" type="tns:GetUserRequestType"/>
<xsd:element name="GetUserResponse" type="tns:GetUserResponseType"/>
</xsd:schema>
</types>
<message name="GetUserRequest">
<part name="parameters" element="tns:GetUser"/></message>
<message name="GetUserResponse">
<part name="parameters" element="tns:GetUserResponse"/></message>
<portType name="PsocialPortType">
<operation name="GetUser">
<input message="tns:GetUserRequest"/>
<output message="tns:GetUserResponse"/>
</operation>
</portType>
<binding name="PsocialBinding" type="tns:PsocialPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetUser">
<soap:operation soapAction="urn:wwservice#GetUser" style="document"/>
<input><soap:body use="literal" namespace="urn:wwservice"/></input>
<output><soap:body use="literal" namespace="urn:wwservice"/></output>
</operation>
</binding>
<service name="Psocial">
<port name="PsocialPort" binding="tns:PsocialBinding">
<soap:address location="http://example.com/webservice/wwservice.php"/>
</port>
</service>
</definitions>
Please let me know where i getting wrong
I m using this to create WSDL
$server = new soap_server();
// Changed for coupons data start
$server->soap_defencoding = 'UTF-8';
$server->decode_utf8 = false;
// Changed for coupons data end
//$server->configureWSDL('m-way', 'urn:wwservice');
$server->configureWSDL('Psocial', 'urn:wwservice',false,'document');
// New function for spiff
$server->register("GetUser",
array('Username'=>'xsd:string','Password'=>'xsd:string'),
array('userDetails'=>'xsd:string'),
'urn:wwservice',
'urn:wwservice#GetUser', 'document', 'literal'
);
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA)? $HTTP_RAW_POST_DATA : file_get_contents('php://input');
$server->service($HTTP_RAW_POST_DATA);
The problem is that the SOAP response you get doesn't match the description of it in the WSDL, the WSDL has elementFormDefault="qualified" for the schema, which says that child element would be in the namespace, e.g. its saying the response should be
<GetUserResponse xmlns="urn:wwservice">
<userDetails>Hello</userDetails>
</GetUserResponse>
but the actual response you get has
<GetUserResponse xmlns="urn:wwservice">
<userDetails xmlns="">Successfully write a web service hurray</userDetails>
</GetUserResponse>
Note how the namespace for the userDetails element is different. You should either update the WSDL to say elementForDefault="unqualified" or update the web service to return the correct namespace on the userDetails element.
I hope someone can help me. I'm very new at this. I was wondering if it's possible to get an XSD Schema to dump XML data into multiple SQL tables (using the sql:relation attribute, etc.).
One table is proving no problems, so I just wondered if it's possible to dump data in two. It'd be nice to be able to do this with one XSD Schema, but do I have to make two passes on the XML for the second table?
Thanks for any assistance.
Here's the schema itself:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<!-- Skimlinks/Everyfeed schema -->
<!-- definition of simple elements -->
<xs:element name="title" type="xs:string" sql:field="ProductName"/>
<xs:element name="url" type="xs:string" sql:field="ProductURL"/>
<xs:element name="image_url" type="xs:string" sql:field="ImageURL"/>
<xs:element name="currency" type="xs:string" sql:field="currency"/>
<xs:element name="price" type="xs:string" sql:field="Price"/>
<xs:element name="merchant" type="xs:string" sql:field="Brand" default=" " />
<xs:element name="description" type="xs:string" sql:field="Description" default=" "/>
<xs:element name="item" type="xs:string" sql:field="Category" />
<!-- definition of attributes -->
<xs:attribute name="id" type="xs:string" sql:field="SKU" />
<!-- definition of complex elements -->
<xs:element name="category" sql:relation="ProductDataCategory">
<xs:complexType>
<xs:sequence>
<xs:element ref="item" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="product" sql:relation="ProductData">
<xs:complexType>
<xs:sequence>
<xs:element ref="title"/>
<xs:element ref="url"/>
<xs:element ref="image_url"/>
<xs:element ref="currency"/>
<xs:element ref="price"/>
<xs:element ref="merchant"/>
<xs:element ref="description"/>
<xs:element ref="category"/>
</xs:sequence>
<xs:attribute ref="id" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="products" sql:is-constant="1">
<xs:complexType>
<xs:sequence>
<xs:element ref="product" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="everyFeed" sql:is-constant="1">
<xs:complexType>
<xs:sequence>
<xs:element ref="products" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Here's an example of the XML we're importing:
<?xml version='1.0' encoding='utf-8'?>
<feed version="2">
<numFound>7985</numFound>
<products>
<product id="18639|216623247">
<title>Trouser</title>
<url>http://www.products.com/trousers/trouser/</url>
<image_url>http://www.images.co.uk/images/big/4d624426.jpg</image_url>
<verified_image>True</verified_image>
<currency>GBP</currency>
<price>1000</price>
<prev_price>1000</prev_price>
<firstseen>2010-10-27T00:00:00Z</firstseen>
<lastseen>2010-10-27T00:00:00Z</lastseen>
<merchant id="20748">Yours Clothing</merchant>
<by>Yours Clothing</by>
<description></description>
<category>
<item id="9">Lounge & nightwear</item>
<item id="3">Women</item>
<item id="2">Clothing</item>
<item id="1">Clothing, shoes & accessories</item>
</category>
</product>
</products>
</feed>
As you can see, it attempts to dump into two tables: ProductData and ProductDataCategory. Only the stuff stored in the <item> elements should go in the latter table (in the field category).
The error message reads:
Error: Relationship expected on 'category'
I don't know why :(
Thanks for any assistance in getting this working!
You may need to define a SQL relationship in the XSD file if you are trying to do a bulk import. I ran into a similar problem (this is just an example, not specific to your XSD):
<xs:annotation>
<xs:appinfo>
<sql:relationship name="Detail"
parent="Product"
parent-key="ProductID"
child="Details"
child-key="ProductID"
/>
<sql:relationship name="ProductFiles"
parent="Product"
parent-key="ProductID"
child="Files"
child-key="ProductID"
/>
<sql:relationship name="ProductToList"
parent="Product"
parent-key="ProductID"
child="ProductList"
child-key="ProductID"
/>
<sql:relationship name="ListToProduct"
parent="ProductList"
parent-key="ID"
child="ProductListProduct"
child-key="ProductListID"
/>
</xs:appinfo>
</xs:annotation>
Django,
Why not try something like DBVis - http://www.dbvis.com/ - to create a visual representation of all the relationships in your database and work towards having the xsd match the generated diagram. This'll ensure you get all of these relationships.
See here for an example screeshot for a very simple database - http://www.dbvis.com/products/dbvis/doc/main/doc/ug/databaseExplorer/images/genericschemaview.png
I can vouch for it working well for much larger databases too.
Hopefully this'll help.