(http://www.houseoffusion.com/cf_lists/cache.cfm/4/18/18459.htm)
It works fine as is but currently only returns yes/no. I'm trying to
return the list of alternate addresses UPS returns but so far no luck.
I can return simple variables back to my calling page, but if I try to
pass back a struct or array - it bombs.
I've stripped out the main call to UPS and it's working and I can
create an array containing the data I want. I just can't seem to
return it...
I'm not very familiar with CFC's, etc so bear with me if I'm doing
something obviously dumb:
Original - works fine:
<CFCOMPONENT>
<CFFUNCTION ACCESS="Remote" RETURNTYPE="Boolean" NAME="VerifyUPS">
<CFARGUMENT NAME="LicenseNumber" REQUIRED="True" DEFAULT="" HINT="UPS Provided XML License Number">
<CFARGUMENT NAME="UserID" REQUIRED="True" DEFAULT="" HINT="UPS Provided UserID">
<CFARGUMENT NAME="Password" REQUIRED="True" DEFAULT="" HINT="UPS Provided Password">
<CFARGUMENT NAME="City" REQUIRED="True" DEFAULT="" HINT="City to perform validation">
<CFARGUMENT NAME="State" REQUIRED="True" DEFAULT="" HINT="2 Letter Code of US States">
<CFARGUMENT NAME="Zip" REQUIRED="True" DEFAULT="" HINT="Standard 5 digit US Zip code">
<CFARGUMENT NAME="Country" REQUIRED="True" DEFAULT="" HINT="1 for US 0 for other country">
<CFARGUMENT NAME="FullName" REQUIRED="True" DEFAULT="" HINT="Full Name of Customer">
<CFLOOP COLLECTION="#ARGUMENTS#" ITEM="ARGUMENT">
<CFSET ARGUMENTS[ARGUMENT]=TRIM(ARGUMENTS[ARGUMENT])>
</CFLOOP>
<CFTRY>
<CFIF ARGUMENTS.COUNTRY IS 1>
<CFOBJECT NAME="objXMLHTTP" CLASS="msxml2.ServerXMLHTTP" ACTION="" TYPE="COM">
<CFPARAM NAME="VARIABLES.CITYLIST" DEFAULT="">
<CFPARAM NAME="VARIABLES.STATELIST" DEFAULT="">
<CFPARAM NAME="VARIABLES.ZIPLIST1" DEFAULT="">
<CFPARAM NAME="VARIABLES.ZIPLIST2" DEFAULT="">
<CFSCRIPT>
InputXML='<?xml version="1.0"?><AccessRequest><AccessLicenseNumber>#ARGUMENTS.LICENSENUMBER#</AccessLicenseNumber><UserId>#ARGUMENTS.USERID#</UserId><Password>#ARGUMENTS.PASSWORD#</Password></AccessRequest><?xml version="1.0"?><AddressValidationRequest xml:lang="en-US"><Request><TransactionReference><CustomerContext>#ARGUMENTS.FULLNAME#-Customer Data</CustomerContext><XpciVersion>1.0001</XpciVersion></TransactionReference><RequestAction>AV</RequestAction></Request><Address><City>#ARGUMENTS.CITY#</City><StateProvinceCode>#ARGUMENTS.STATE#</StateProvinceCode><PostalCode>#ARGUMENTS.ZIP#</PostalCode></Address></AddressValidationRequest>';
lResolve = 5 * 1000;
lConnect = 5 * 1000;
lSend = 15 * 1000;
lReceive = 15 * 1000;
objXMLHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive);
objXMLHTTP.open("POST","https://www.ups.com/ups.app/xml/AV",false);
objXMLHTTP.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
objXMLHTTP.send(InputXML);
</CFSCRIPT>
<CFSET VARIABLES.MYXML=XMLNEW()>
<CFSET VARIABLES.MYXML=XMLPARSE(OBJXMLHTTP.RESPONSETEXT)>
<CFSET VARIABLES.CITYRESULTS=XMLSEARCH(VARIABLES.MYXML,'AddressValidationResponse/AddressValidationResult/Address/City')>
<CFSET VARIABLES.STATERESULTS=XMLSEARCH(VARIABLES.MYXML,'AddressValidationResponse/AddressValidationResult/Address/StateProvinceCode')>
<CFSET VARIABLES.ZIPRESULTS=XMLSEARCH(VARIABLES.MYXML,'AddressValidationResponse/AddressValidationResult/PostalCodeLowEnd')>
<CFLOOP FROM="1" TO="#ARRAYLEN(VARIABLES.CITYRESULTS)#" INDEX="I">
<CFSET VARIABLES.CITYLIST=VARIABLES.CITYLIST&','&VARIABLES.MYXML.AddressValidationResponse.AddressValidationResult[I].Address.City.xmltext>
</CFLOOP>
<CFLOOP FROM="1" TO="#ARRAYLEN(VARIABLES.STATERESULTS)#" INDEX="I">
<CFSET VARIABLES.STATELIST=VARIABLES.STATELIST&','&VARIABLES.MYXML.AddressValidationResponse.AddressValidationResult[I].Address.StateProvinceCode.xmltext>
</CFLOOP>
<CFLOOP FROM="1" TO="#ARRAYLEN(VARIABLES.ZIPRESULTS)#" INDEX="I">
<CFSET VARIABLES.ZIPLIST1=VARIABLES.ZIPLIST1&','&VARIABLES.MYXML.AddressValidationResponse.AddressValidationResult[I].PostalCodeLowEnd.xmltext>
<CFSET VARIABLES.ZIPLIST2=VARIABLES.ZIPLIST2&','&VARIABLES.MYXML.AddressValidationResponse.AddressValidationResult[I].PostalCodeHighEnd.xmltext>
</CFLOOP>
<CFIF LEN(VARIABLES.CITYLIST)>
<CFSET VARIABLES.CITYLIST=RIGHT(VARIABLES.CITYLIST,LEN(VARIABLES.CITYLIST)-1)>
</CFIF>
<CFIF LEN(VARIABLES.STATELIST)>
<CFSET VARIABLES.STATELIST=RIGHT(VARIABLES.STATELIST,LEN(VARIABLES.STATELIST)-1)>
</CFIF>
<CFIF LEN(VARIABLES.ZIPLIST1)>
<CFSET VARIABLES.ZIPLIST1=RIGHT(VARIABLES.ZIPLIST1,LEN(VARIABLES.ZIPLIST1)-1)>
<CFSET VARIABLES.ZIPLIST2=RIGHT(VARIABLES.ZIPLIST2,LEN(VARIABLES.ZIPLIST2)-1)>
</CFIF>
<CFIF LISTFINDNOCASE(VARIABLES.CITYLIST,VARIABLES.CITY) AND LISTFINDNOCASE(VARIABLES.STATELIST,VARIABLES.STATE) AND VARIABLES.ZIP GTE VARIABLES.ZIPLIST1 AND VARIABLES.ZIP LTE VARIABLES.ZIPLIST2>
<CFSET MYRETURN=True>
<CFRETURN MYRETURN>
<CFELSE>
<CFSET MYRETURN=False>
<CFRETURN MYRETURN>
</CFIF>
<CFELSE>
<CFSET MYRETURN=True>
<CFRETURN MYRETURN>
</CFIF>
<CFCATCH TYPE="ANY">
<CFSET MYRETURN=True>
<CFRETURN MYRETURN>
</CFCATCH>
</CFTRY>
</CFFUNCTION>
</CFCOMPONENT>
My altered code:
<CFCOMPONENT>
<cffunction name="VerifyUPS" access="remote" returntype="Any">
<CFARGUMENT NAME="LicenseNumber" REQUIRED="True" DEFAULT="" HINT="UPS Provided XML License Number">
<CFARGUMENT NAME="UserID" REQUIRED="True" DEFAULT="" HINT="UPS Provided UserID">
<CFARGUMENT NAME="Password" REQUIRED="True" DEFAULT="" HINT="UPS Provided Password">
<CFARGUMENT NAME="City" REQUIRED="True" DEFAULT="" HINT="City to perform validation">
<CFARGUMENT NAME="State" REQUIRED="True" DEFAULT="" HINT="2 Letter Code of US States">
<CFARGUMENT NAME="Zip" REQUIRED="True" DEFAULT="" HINT="Standard 5 digit US Zip code">
<CFARGUMENT NAME="Country" REQUIRED="True" DEFAULT="" HINT="1 for US 0 for other country">
<CFARGUMENT NAME="FullName" REQUIRED="True" DEFAULT="" HINT="Full Name of Customer">
<CFLOOP COLLECTION="#ARGUMENTS#" ITEM="ARGUMENT">
<CFSET ARGUMENTS[ARGUMENT]=TRIM(ARGUMENTS[ARGUMENT])>
</CFLOOP>
<CFOBJECT NAME="objXMLHTTP" CLASS="msxml2.ServerXMLHTTP" ACTION="" TYPE="COM">
<CFSCRIPT>
InputXML='<?xml version="1.0"?><AccessRequest><AccessLicenseNumber>#ARGUMENTS.LICENSENUMBER#</AccessLicenseNumber><UserId>#ARGUMENTS.USERID#</UserId><Password>#ARGUMENTS.PASSWORD#</Password></AccessRequest><?xml version="1.0"?><AddressValidationRequest xml:lang="en-US"><Request><TransactionReference><CustomerContext>#ARGUMENTS.FULLNAME#-Customer Data</CustomerContext><XpciVersion>1.0001</XpciVersion></TransactionReference><RequestAction>AV</RequestAction></Request><Address><City>#ARGUMENTS.CITY#</City><StateProvinceCode>#ARGUMENTS.STATE#</StateProvinceCode><PostalCode>#ARGUMENTS.ZIP#</PostalCode></Address></AddressValidationRequest>';
lResolve = 5 * 1000;
lConnect = 5 * 1000;
lSend = 15 * 1000;
lReceive = 15 * 1000;
objXMLHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive);
objXMLHTTP.open("POST","https://wwwcie.ups.com/ups.app/xml/AV",false);
objXMLHTTP.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
objXMLHTTP.send(InputXML);
</CFSCRIPT>
<CFSET VARIABLES.MYXML=XMLNEW()>
<CFSET VARIABLES.MYXML=XMLPARSE(OBJXMLHTTP.RESPONSETEXT)>
<CFSET VARIABLES.QUALITY=XMLSEARCH(VARIABLES.MYXML,'AddressValidationResponse/AddressValidationResult')>
<!--- loop over XML and pull out needed parts of address --->
<cfset JIM = ArrayNew(1)>
<cfloop index="i" from="1" to="#ArrayLen(VARIABLES.QUALITY)#">
<cfset JIM[i] = StructNew()>
<cfset Jim[i].City = VARIABLES.MYXML.AddressValidationResponse.AddressValidationResult[i].Address.City.xmltext>
<cfset Jim[i].StateProvinceCode = VARIABLES.MYXML.AddressValidationResponse.AddressValidationResult[i].Address.StateProvinceCode.xmltext>
<cfset Jim[i].PostalCodeLowEnd = VARIABLES.MYXML.AddressValidationResponse.AddressValidationResult[i].PostalCodeLowEnd.xmltext>
<cfset Jim[i].PostalCodeHighEnd = VARIABLES.MYXML.AddressValidationResponse.AddressValidationResult[i].PostalCodeHighEnd.xmltext>
</cfloop>
<CFRETURN JIM>
</cffunction>
</CFCOMPONENT>
This doesn't work at all. I can set JIM to a simple string and it
works fine:
<cfset Jim = VARIABLES.MYXML.AddressValidationResponse.AddressValidationResult[i].Address.City.xmltext>
But if it's an array. No go.
Could not perform web service invocation "VerifyUPS" because java.lang.NullPointerException
Help?!
Jim
[Todays Threads] [This Message] [Subscription] [Fast Unsubscribe] [User Settings]

