I believe your schema says elementFormDefault=qualified. However, that soap
message has the elements unqualified. You can update your schema to say
something like:
<xs:element name="code" type="xs:int" elementForm="unqualified"/>
just for those elements if you don't want the entire schema to be be
unqualified.
Dan
On Thu November 12 2009 11:34:03 am deepika vadapalli wrote:
> But this time error is slightly different.
>
> Unmarshalling Error: unexpected element (uri:"", local:"code"). Expected
> elements are <{http://faults.valueobject.application.wdw.com/}message>,<{
> http://faults.valueobject.application.wdw.com/}node>,<{
> http://faults.valueobject.application.wdw.com/}detailedMessage>,<{
> http://faults.valueobject.application.wdw.com/}systemOfRecord>,<{
> http://faults.valueobject.application.wdw.com/}code>,<{
> http://faults.valueobject.application.wdw.com/}additionalInfo>,<{
> http://faults.valueobject.application.wdw.com/}severity>
>
> Can you help me out...
>
>
> Thanks,
> Deepika
> On Thu, Nov 12, 2009 at 11:25 AM, deepika vadapalli <
>
> [email protected]> wrote:
> > Thanks for the response.
> >
> > But I get the same exception even if I change my schema from atrributes
> > to elements.
> > Please see my schema below for that exception object.
> >
> > <
> > xs:complexType name=*"DataNotFoundServiceException"*>
> >
> > <xs:sequence>
> >
> > <xs:element name=*"code"* type=*"xs:int"*/>
> >
> > <xs:element name=*"message"* type=*"xs:string"*/>
> >
> > <xs:element name=*"systemOfRecord"* type=*"xs:string"*/>
> >
> > <xs:element name=*"node"* type=*"xs:string"*/>
> >
> > <xs:element name=*"detailedMessage"* type=*"xs:string"*/>
> >
> > <xs:element name=*"severity"* type=*"xs:string"*/>
> >
> > <xs:element name=*"additionalInfo"* type=*"xs:string"*/>
> >
> > </xs:sequence>
> >
> > </xs:complexType>
> >
> > On Wed, Nov 11, 2009 at 4:07 PM, Daniel Kulp <[email protected]> wrote:
> >> OK. The soap message isn't valid according to that schema. In the
> >> schema,
> >> they are all <xs:attribute> and thus should be attributes, not child
> >> elements.
> >>
> >> Dan
> >>
> >> On Wed November 11 2009 4:02:30 pm deepika vadapalli wrote:
> >> > Dan,
> >> >
> >> > I am sorry. Actual for that call, I get DataNotFoundServiceException.
> >> > Schema is like this:
> >> >
> >> > <xs:element name="DataNotFoundServiceException">
> >> >
> >> > <xs:complexType>
> >> >
> >> > *<xs:sequence>
> >> > *
> >> >
> >> > *</xs:sequence>
> >> > *
> >> >
> >> > <xs:attribute name="code" type="xs:int" use="required"/>
> >> >
> >> > <xs:attribute name="message" type="xs:string" use="required"/>
> >> >
> >> > <xs:attribute name="systemOfRecord" type="xs:string" use="required"/>
> >> >
> >> > <xs:attribute name="node" type="xs:string" use="required"/>
> >> >
> >> > <xs:attribute name="detailedMessage" type="xs:string" use="required"/>
> >> >
> >> > <xs:attribute name="severity" type="xs:string" use="required"/>
> >> >
> >> > <xs:attribute name="additionalInfo" type="xs:string" use="required"/>
> >> >
> >> > </xs:complexType>
> >> >
> >> > *</xs:element>
> >> > *
> >> > I have getters and setters .
> >> >
> >> > @XmlAccessorType(XmlAccessType.*FIELD*)
> >> >
> >> > @XmlType(name = "")
> >> >
> >> > @XmlRootElement(name = "DataNotFoundServiceException")
> >> > *
> >> >
> >> > public* *class* DataNotFoundServiceException
> >> >
> >> > *implements* Serializable
> >> >
> >> > {
> >> >
> >> > *private* *final* *static* *long* *serialVersionUID* = -1L;
> >> >
> >> > @XmlAttribute(required = *true*)
> >> >
> >> > @XmlJavaTypeAdapter(IntegerAdapter.*class*)
> >> >
> >> > @XmlSchemaType(name = "int")
> >> >
> >> > *protected* Integer code;
> >> >
> >> > @XmlAttribute(required = *true*)
> >> >
> >> > *protected* String message;
> >> >
> >> > @XmlAttribute(required = *true*)
> >> >
> >> > *protected* String systemOfRecord;
> >> >
> >> > @XmlAttribute(required = *true*)
> >> >
> >> > *protected* String node;
> >> >
> >> > @XmlAttribute(required = *true*)
> >> >
> >> > *protected* String detailedMessage;
> >> >
> >> > @XmlAttribute(required = *true*)
> >> >
> >> > *protected* String severity;
> >> >
> >> > @XmlAttribute(required = *true*)
> >> >
> >> > *protected* String additionalInfo;
> >> >
> >> > *public* Integer getCode() {
> >> >
> >> > *return* code;
> >> >
> >> > }
> >> >
> >> > *void* setCode(Integer value) {
> >> >
> >> > *this*.code = value;
> >> >
> >> > }
> >> >
> >> > *public* *boolean* isSetCode() {
> >> >
> >> > *return* (*this*.code!= *null*);
> >> >
> >> > }
> >> > Below is the soap response.
> >> >
> >> > I have gettes and setters.
> >> > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
> >> > <soap:Body>
> >> > <soap:Fault>
> >> > <faultcode>soap:Server</faultcode>
> >> > <faultstring>No Policies could be found for productID=53825,
> >> > productChannelID=null, facilityID=90002241, policyType=,
> >> > includeMessage=true, includeSchedule=false,
> >> > effectiveDate=[null]</faultstring>
> >> > <detail>
> >> > <ns1:DataNotFoundServiceException xmlns:ns1="
> >> > http://faults.valueobject.application.wdw.com">
> >> > <code xsi:nil="true" xmlns:ns2="
> >> > http://packaging.valueobject.application.wdw.com/" xmlns:ns3="
> >> > http://packaging.valuetransferobject.application.wdw.com/" xmlns:ns4="
> >> > http://pricing.valueobject.application.wdw.com/" xmlns:ns5="
> >> > http://chargeitems.valueobject.application.wdw.com/" xmlns:xsi="
> >> > http://www.w3.org/2001/XMLSchema-instance"/<
> >>
> >> http://www.w3.org/2001/XMLSchem
> >>
> >> > a-instance%22/>
> >> >
> >> > <message xmlns:ns2="
> >> > http://packaging.valueobject.application.wdw.com/" xmlns:ns3="
> >> > http://packaging.valuetransferobject.application.wdw.com/" xmlns:ns4="
> >> > http://pricing.valueobject.application.wdw.com/" xmlns:ns5="
> >> > http://chargeitems.valueobject.application.wdw.com/">No<
> >>
> >> http://chargeitems.
> >>
> >> > valueobject.application.wdw.com/%22%3ENo>Policies could be found for
> >> > productID=53825, productChannelID=null,
> >> > facilityID=90002241, policyType=, includeMessage=true,
> >> > includeSchedule=false, effectiveDate=[null]</message>
> >> > <systemOfRecord xsi:nil="true" xmlns:ns2="
> >> > http://packaging.valueobject.application.wdw.com/" xmlns:ns3="
> >> > http://packaging.valuetransferobject.application.wdw.com/" xmlns:ns4="
> >> > http://pricing.valueobject.application.wdw.com/" xmlns:ns5="
> >> > http://chargeitems.valueobject.application.wdw.com/" xmlns:xsi="
> >> > http://www.w3.org/2001/XMLSchema-instance"/<
> >>
> >> http://www.w3.org/2001/XMLSchem
> >>
> >> > a-instance%22/>
> >> >
> >> > <node xsi:nil="true" xmlns:ns2="
> >> > http://packaging.valueobject.application.wdw.com/" xmlns:ns3="
> >> > http://packaging.valuetransferobject.application.wdw.com/" xmlns:ns4="
> >> > http://pricing.valueobject.application.wdw.com/" xmlns:ns5="
> >> > http://chargeitems.valueobject.application.wdw.com/" xmlns:xsi="
> >> > http://www.w3.org/2001/XMLSchema-instance"/<
> >>
> >> http://www.w3.org/2001/XMLSchem
> >>
> >> > a-instance%22/>
> >> >
> >> > <detailedMessage xsi:nil="true" xmlns:ns2="
> >> > http://packaging.valueobject.application.wdw.com/" xmlns:ns3="
> >> > http://packaging.valuetransferobject.application.wdw.com/" xmlns:ns4="
> >> > http://pricing.valueobject.application.wdw.com/" xmlns:ns5="
> >> > http://chargeitems.valueobject.application.wdw.com/" xmlns:xsi="
> >> > http://www.w3.org/2001/XMLSchema-instance"/<
> >>
> >> http://www.w3.org/2001/XMLSchem
> >>
> >> > a-instance%22/>
> >> >
> >> > <severity xsi:nil="true" xmlns:ns2="
> >> > http://packaging.valueobject.application.wdw.com/" xmlns:ns3="
> >> > http://packaging.valuetransferobject.application.wdw.com/" xmlns:ns4="
> >> > http://pricing.valueobject.application.wdw.com/" xmlns:ns5="
> >> > http://chargeitems.valueobject.application.wdw.com/" xmlns:xsi="
> >> > http://www.w3.org/2001/XMLSchema-instance"/<
> >>
> >> http://www.w3.org/2001/XMLSchem
> >>
> >> > a-instance%22/>
> >> >
> >> > <additionalInfo xsi:nil="true" xmlns:ns2="
> >> > http://packaging.valueobject.application.wdw.com/" xmlns:ns3="
> >> > http://packaging.valuetransferobject.application.wdw.com/" xmlns:ns4="
> >> > http://pricing.valueobject.application.wdw.com/" xmlns:ns5="
> >> > http://chargeitems.valueobject.application.wdw.com/" xmlns:xsi="
> >> > http://www.w3.org/2001/XMLSchema-instance"/<
> >>
> >> http://www.w3.org/2001/XMLSchem
> >>
> >> > a-instance%22/>
> >> >
> >> > </ns1:DataNotFoundServiceException>
> >> > </detail>
> >> > </soap:Fault>
> >> > </soap:Body>
> >> > </soap:Envelope>
> >> >
> >> > On Wed, Nov 11, 2009 at 3:54 PM, Daniel Kulp <[email protected]> wrote:
> >> > > What does your ValidationServiceException bean look like? Does it
> >>
> >> have
> >>
> >> > > proper getter/setters for the code attribute?
> >> > >
> >> > >
> >> > > What does the schema for the service look like? Particularly for
> >> > > that exception type.
> >> > >
> >> > > Dan
> >> > >
> >> > > On Wed November 11 2009 3:29:05 pm deepika vadapalli wrote:
> >> > > > Hi All,
> >> > > >
> >> > > > I use CXF 2.1.7.
> >> > > > I have a soap message which generates valid fault. I am able to
> >> > >
> >> > > unmarshall
> >> > >
> >> > > > faults from other services properly.
> >> > > > When I call this particular service, in my client code, I get
> >> > >
> >> > > Unmarshlling
> >> > >
> >> > > > exception.
> >> > > > When I check, the object has all the attributes, the fault messgae
> >>
> >> has
> >>
> >> > > > sent. Can you please help me out.
> >> > > > Caused by: javax.xml.bind.UnmarshalException: unexpected element
> >> > > > (uri:"", local:"code"). Expected elements are (none)
> >> > > > at
> >>
> >> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEven
> >>t
> >>
> >> > >(U
> >> > >
> >> > > > nmarshallingContext.java:616) at
> >>
> >> com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:
> >>2
> >>
> >> > >44
> >> > >
> >> > > > ) at
> >>
> >> com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:
> >>2
> >>
> >> > >39
> >> > >
> >> > > > ) at
> >>
> >> com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildEle
> >>m
> >>
> >> > >en
> >> > >
> >> > > > t(Loader.java:116) at
> >>
> >> com.sun.xml.bind.v2.runtime.unmarshaller.Loader.childElement(Loader.java:
> >> > >10
> >> > >
> >> > > > 1) at
> >>
> >> com.sun.xml.bind.v2.runtime.unmarshaller.StructureLoader.childElement(St
> >>r
> >>
> >> > >uc
> >> > >
> >> > > > tureLoader.java:245) at
> >>
> >> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElem
> >>e
> >>
> >> > >nt
> >> > >
> >> > > > (UnmarshallingContext.java:452) at
> >>
> >> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startEleme
> >>n
> >>
> >> > >t(
> >> > >
> >> > > > UnmarshallingContext.java:433) at
> >>
> >> com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElemen
> >>t
> >>
> >> > >(I
> >> > >
> >> > > > nterningXmlVisitor.java:71) at
> >>
> >> com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXCo
> >>n
> >>
> >> > >ne
> >> > >
> >> > > > ctor.java:137) at
> >> > > >
> >> > > > com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:240
> >> > > >)
> >>
> >> at
> >>
> >> > > >
> >> > > > com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:277
> >> > > >)
> >>
> >> at
> >>
> >> > > >
> >> > > > com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:246
> >> > > >)
> >>
> >> at
> >>
> >> > > >
> >> > > > com.sun.xml.bind.unmarshaller.DOMScanner.scan(DOMScanner.java:123)
> >>
> >> at
> >>
> >>
> >> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Unm
> >>a
> >>
> >> > >rs
> >> > >
> >> > > > hallerImpl.java:314) at
> >>
> >> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Unma
> >>r
> >>
> >> > >sh
> >> > >
> >> > > > allerImpl.java:293) at
> >>
> >> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.jav
> >>a
> >>
> >> > >:6
> >> > >:
> >> > > > 43) at
> >>
> >> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.jav
> >>a
> >>
> >> > >:5
> >> > >:
> >> > > > 33) at
> >> > >
> >> > > org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:113)
> >> > >
> >> > > > at
> >>
> >> org.apache.cxf.interceptor.ClientFaultConverter.processFaultDetail(Clien
> >>t
> >>
> >> > >Fa
> >> > >
> >> > > > ultConverter.java:131) at
> >>
> >> org.apache.cxf.interceptor.ClientFaultConverter.handleMessage(ClientFaul
> >>t
> >>
> >> > >Co
> >> > >
> >> > > > nverter.java:74) at
> >>
> >> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorC
> >>h
> >>
> >> > >ai
> >> > >
> >> > > > n.java:236) at
> >>
> >> org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage
> >>(
> >>
> >> > >Ab
> >> > >
> >> > > > stractFaultChainInitiatorObserver.java:96) at
> >>
> >> org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMess
> >>a
> >>
> >> > >ge
> >> > >
> >> > > > (CheckFaultInterceptor.java:69) at
> >>
> >> org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMess
> >>a
> >>
> >> > >ge
> >> > >
> >> > > > (CheckFaultInterceptor.java:34) at
> >>
> >> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorC
> >>h
> >>
> >> > >ai
> >> > >
> >> > > > n.java:236) at
> >> > > > org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:664)
> >>
> >> at
> >>
> >>
> >> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResp
> >>o
> >>
> >> > >ns
> >> > >
> >> > > > eInternal(HTTPConduit.java:2131) at
> >>
> >> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResp
> >>o
> >>
> >> > >ns
> >> > >
> >> > > > e(HTTPConduit.java:2014) at
> >>
> >> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTP
> >>C
> >>
> >> > >on
> >> > >
> >> > > > duit.java:1939) at
> >>
> >> org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutpu
> >>t
> >>
> >> > >St
> >> > >
> >> > > > ream.java:47) at
> >>
> >> org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:188)
> >>
> >> > > at
> >>
> >> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
> >>
> >> > > at
> >>
> >> org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:627)
> >>
> >> > > > at
> >>
> >> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingI
> >>n
> >>
> >> > >te
> >> > >
> >> > > > rceptor.handleMessage(MessageSenderInterceptor.java:62) at
> >>
> >> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorC
> >>h
> >>
> >> > >ai
> >> > >
> >> > > > n.java:236) at
> >> > > > org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:478) at
> >> > > > org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:308) at
> >> > > > org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:260) at
> >> > > >
> >> > > > org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73
> >> > > >)
> >>
> >> at
> >>
> >>
> >> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:127)
> >>
> >> > > > ... 56 more
> >> > > >
> >> > > > here is the example response:
> >> > > >
> >> > > > <soap:Envelope xmlns:soap="
> >>
> >> http://schemas.xmlsoap.org/soap/envelope/">
> >>
> >> > > > <soap:Body>
> >> > > > <soap:Fault>
> >> > > > <faultcode>soap:Server</faultcode>
> >> > > > <faultstring>Discount policy ID is required when a
> >> > > > specific Product Channel is requested for the priceComponents()
> >> > > > service.</faultstring> <detail>
> >> > > > <ns1:ValidationServiceException xmlns:ns1="
> >> > > > http://faults.valueobject.application.wdw.com">
> >> > > > <additionalInfo xsi:nil="true" xmlns:ns2="
> >> > > > http://packaging.valuetransferobject.application.wdw.com/"
> >>
> >> xmlns:ns3="
> >>
> >> > > > http://pricing.valueobject.application.wdw.com/" xmlns:ns4="
> >> > > > http://packaging.valueobject.application.wdw.com/" xmlns:ns5="
> >> > > > http://chargeitems.valueobject.application.wdw.com/" xmlns:ns6="
> >> > > > http://faults.valueobject.application.wdw.com/" xmlns:xsi="
> >> > > > http://www.w3.org/2001/XMLSchema-instance"/>
> >> > > > <code xsi:nil="true" xmlns:ns2="
> >> > > > http://packaging.valuetransferobject.application.wdw.com/"
> >>
> >> xmlns:ns3="
> >>
> >> > > > http://pricing.valueobject.application.wdw.com/" xmlns:ns4="
> >> > > > http://packaging.valueobject.application.wdw.com/" xmlns:ns5="
> >> > > > http://chargeitems.valueobject.application.wdw.com/" xmlns:ns6="
> >> > > > http://faults.valueobject.application.wdw.com/" xmlns:xsi="
> >> > > > http://www.w3.org/2001/XMLSchema-instance"/>
> >> > > > <systemOfRecord xsi:nil="true" xmlns:ns2="
> >> > > > http://packaging.valuetransferobject.application.wdw.com/"
> >>
> >> xmlns:ns3="
> >>
> >> > > > http://pricing.valueobject.application.wdw.com/" xmlns:ns4="
> >> > > > http://packaging.valueobject.application.wdw.com/" xmlns:ns5="
> >> > > > http://chargeitems.valueobject.application.wdw.com/" xmlns:ns6="
> >> > > > http://faults.valueobject.application.wdw.com/" xmlns:xsi="
> >> > > > http://www.w3.org/2001/XMLSchema-instance"/>
> >> > > > <node xsi:nil="true" xmlns:ns2="
> >> > > > http://packaging.valuetransferobject.application.wdw.com/"
> >>
> >> xmlns:ns3="
> >>
> >> > > > http://pricing.valueobject.application.wdw.com/" xmlns:ns4="
> >> > > > http://packaging.valueobject.application.wdw.com/" xmlns:ns5="
> >> > > > http://chargeitems.valueobject.application.wdw.com/" xmlns:ns6="
> >> > > > http://faults.valueobject.application.wdw.com/" xmlns:xsi="
> >> > > > http://www.w3.org/2001/XMLSchema-instance"/>
> >> > > > <detailedMessage xsi:nil="true" xmlns:ns2="
> >> > > > http://packaging.valuetransferobject.application.wdw.com/"
> >>
> >> xmlns:ns3="
> >>
> >> > > > http://pricing.valueobject.application.wdw.com/" xmlns:ns4="
> >> > > > http://packaging.valueobject.application.wdw.com/" xmlns:ns5="
> >> > > > http://chargeitems.valueobject.application.wdw.com/" xmlns:ns6="
> >> > > > http://faults.valueobject.application.wdw.com/" xmlns:xsi="
> >> > > > http://www.w3.org/2001/XMLSchema-instance"/>
> >> > > > <severity xsi:nil="true" xmlns:ns2="
> >> > > > http://packaging.valuetransferobject.application.wdw.com/"
> >>
> >> xmlns:ns3="
> >>
> >> > > > http://pricing.valueobject.application.wdw.com/" xmlns:ns4="
> >> > > > http://packaging.valueobject.application.wdw.com/" xmlns:ns5="
> >> > > > http://chargeitems.valueobject.application.wdw.com/" xmlns:ns6="
> >> > > > http://faults.valueobject.application.wdw.com/" xmlns:xsi="
> >> > > > http://www.w3.org/2001/XMLSchema-instance"/>
> >> > > > <message xmlns:ns2="
> >> > > > http://packaging.valuetransferobject.application.wdw.com/"
> >>
> >> xmlns:ns3="
> >>
> >> > > > http://pricing.valueobject.application.wdw.com/" xmlns:ns4="
> >> > > > http://packaging.valueobject.application.wdw.com/" xmlns:ns5="
> >> > > > http://chargeitems.valueobject.application.wdw.com/" xmlns:ns6="
> >> > > > http://faults.valueobject.application.wdw.com/">Discount policy ID
> >>
> >> is
> >>
> >> > > > required when a specific Product Channel is requested for the
> >> > > > priceComponents() service.</message>
> >> > > > </ns1:ValidationServiceException>
> >> > > > </detail>
> >> > > > </soap:Fault>
> >> > > > </soap:Body>
> >> > > > </soap:Envelope>
> >> > > >
> >> > > >
> >> > > >
> >> > > > Thnaks,
> >> > > > Deepika
> >> > >
> >> > > --
> >> > > Daniel Kulp
> >> > > [email protected]
> >> > > http://www.dankulp.com/blog
> >>
> >> --
> >> Daniel Kulp
> >> [email protected]
> >> http://www.dankulp.com/blog
>
--
Daniel Kulp
[email protected]
http://www.dankulp.com/blog