Netsuite Webサービスの新機能です。私がする必要があるのは、Javaアプリケーションを通じてnetsuiteサンドボックスアカウントを認証し、すべての連絡先を取得することだけです。私も、おそらくサンドボックス用のWSDLことを知って来て、NetSuiteのメールアドレスまたはアカウント番号が正しくありませんが、正しい資格情報です。
AxisFault
faultCode: {http//schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: You have entered an invalid email address or account number. Please try again.
faultActor:
faultNode:
faultDetail:
{urn:faults_2012_1.platform.webservices.netsuite.com}invalidCredentialsFault:<platformFaults:code>INVALID_LOGIN_CREDENTIALS</platformFaults:code><platformFaults:message>You have entered an invalid email address or account number. Please try again.</platformFaults:message>
{http//xml.apache.org/axis/}hostname:partners-java10004.bos.netledger.com
You have entered an invalid email address or account number. Please try again.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:379)
at org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeserializer.java:104)
at org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeserializer.java:90)
at com.netsuite.webservices.platform.faults_2012_1.InvalidCredentialsFault.getDeserializer(InvalidCredentialsFault.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.axis.encoding.ser.BaseDeserializerFactory.getSpecialized(BaseDeserializerFactory.java:154)
at org.apache.axis.encoding.ser.BaseDeserializerFactory.getDeserializerAs(BaseDeserializerFactory.java:84)
at org.apache.axis.encoding.DeserializationContext.getDeserializer(DeserializationContext.java:464)
at org.apache.axis.encoding.DeserializationContext.getDeserializerForType(DeserializationContext.java:547)
at org.apache.axis.message.SOAPFaultDetailsBuilder.onStartChild(SOAPFaultDetailsBuilder.java:157)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:379)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:648)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:332)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.netsuite.webservices.platform_2012_1.NetSuiteBindingStub.login(NetSuiteBindingStub.java:10911)
at com.netsuite.webservices.samples.NSClient.login(NSClient.java:381)
at com.netsuite.webservices.samples.NSClient.main(NSClient.java:248)
java.lang.NullPointerException
at com.netsuite.webservices.samples.NSClient.login(NSClient.java:391)
at com.netsuite.webservices.samples.NSClient.main(NSClient.java:248)
: https://webservices.netsuite.com/wsdl/v2012_1_0/netsuite.wsdl 私は上記のWSDLのログインを試み、次のエラーを与える: 以下は、私がログインするために使用していますWSDLファイルへのリンクですサンドボックス以外のアカウントは異なっており、wsdlの下でも試してみましたが、これはうまくいきませんでした。
https://webservices.sandbox.netsuite.com/wsdl/v2012_1_0/netsuite.wsdl
私は何かが足りないか、誤って接近していた場合、誰がお勧めすることはできますか?
/**
* Fully functional, command-line driven application that illustrates how to
* connect to the NetSuite web services and invoke operations. This application
* uses the Customer record as an example across all operations.
*
* Please see the README.html on how to compile and run. Note that the
* nsclient.properties file must exist in the installed root directory for this
* application to run.
*
*/
public class NSClient {
/**
* Proxy class that abstracts the communication with the NetSuite Web
* Services. All NetSuite operations are invoked as methods of this class.
*/
private NetSuitePortType _port;
/**
* Flag that indicates whether the user is currently authentciated, and
* therefore, whether a valid session is available
*/
private boolean _isAuthenticated;
/**
* Utility for writing nd logging to console
*/
private Console _console;
/**
* Abstraction of the external properties file that contains configuration
* parameters and sample data for fields
*/
private Properties _properties = null;
/**
* Requested page size for search
*/
private int _pageSize;
/**
* Constructor
* @throws ServiceException
* @throws FileNotFoundException
* @throws IOException
*/
public NSClient() throws ServiceException, FileNotFoundException, IOException {
_isAuthenticated = false;
// Setting pageSize to 20 records per page
_pageSize = 500;
// Instantiate console logger
_console = new Console("info");
// In order to use SSL forwarding for SOAP messages. Refer to FAQ for details
System.setProperty("axis.socketSecureFactory", "org.apache.axis.components.net.SunFakeTrustSocketFactory");
//System.setProperty("https.protocols", "SSLv3");
// Locate the NetSuite web service.
NetSuiteServiceLocator service = new NetSuiteServiceLocator();
/*NetSuiteService service = new NetSuiteService();
service.AllowAutoRedirects = true;*/
// Enable client cookie management. This is required.
//service.setMaintainSession(true);
service.setNetSuitePortEndpointAddress("https://webservices.sandbox.netsuite.com/services/NetSuitePort_2012_1");
// Get the service port
_port = service.getNetSuitePort();//service.getNetSuitePort(new URL("https://localhost:8443/services/NetSuitePort_2009_1"));
// Setting client timeout to 2 hours for long running operations
((NetSuiteBindingStub) _port).setTimeout(1000 * 60 * 60 * 2);
// Reference to properties file that contains configuration data as
// well as sample data. This file is named nsclient.properties and
// is located in the root directory of this installation.
_properties = new Properties();
_properties.load(new FileInputStream("nsclient.properties"));
}
/**
* Main function that presents the user with the available options and
* invokes the methods that encasulate the methods calls to the web services
* operations.
*
* @param args -
* array of command line arguments
* @throws SOAPException
*/
public static void main(String args[]) throws SOAPException {
NSClient ns = null;
// Instantiate the NetSuite web services
try {
ns = new NSClient();
} catch (ServiceException ex) {
System.out
.println("\n\n[Error]: Error in locating the NetSuite web services. "
+ ex.getMessage());
} catch (FileNotFoundException ex) {
System.out
.println("\n\n[Error]: Cannot find nsclient.properties file. Please ensure that "
+ "this file is in the root directory of this application. ");
} catch (IOException ex) {
System.out.println("\n\n[Error]: An IO error has occured. "
+ ex.getMessage());
}
// Process command line arguments
// if (!ns.processCmdArgs(args))
// return;
// Iterate through command options
while (true) {
try {
int myChoice = 0;
String strMyChoice = null;
ns._console.writeLn("\nPlease make a selection:");
ns._console.writeLn(" 1) Login");
ns._console.writeLn(" 2) Add a customer");
ns._console
.writeLn(" 3) Add a customer with custom fields (CFs must exist)");
ns._console.writeLn(" 4) Update a customer (internalId required)");
ns._console
.writeLn(" 5) Upsert for customer (ExternalId required)");
ns._console
.writeLn(" 6) Update a list of customers (internalIds required)");
ns._console
.writeLn(" 7) Delete a list of customers (internalIds required)");
ns._console.writeLn(" 8) Get a customer (internalId required)");
ns._console
.writeLn(" 9) Get a list of customers (internalIds required)");
ns._console.writeLn(" 10) Search for customers");
ns._console
.writeLn(" 11) Add a Custom Record (Custom Record must exist, internalId required)");
ns._console
.writeLn(" 12) Delete a Custom Record (internalId required)");
ns._console
.writeLn(" 13) Search for a Custom Record (internalId required)");
ns._console.writeLn(" 14) Get other list values");
ns._console.writeLn(" 15) Upload a file");
ns._console.writeLn(" 16) Logout");
ns._console.writeLn(" Q) Quit");
ns._console.write("\nSelection: ");
// Get user input
strMyChoice = ns._console.readLn();
// Process the user response
ns._console.writeLn("");
if ("Q".equals(strMyChoice.toUpperCase())) {
ns._console.write("\nPress any key to quit ... ");
String response = ns._console.readLn();
break;
} else {
myChoice = Integer.parseInt(strMyChoice);
//Setting preferences for the web services client
ns.setPreferences();
switch (myChoice) {
case 1:
if (ns._isAuthenticated) {
ns._console
.info("This user is already logged in and has a valid session.");
}
ns.login(false);
break;
case 2:
ns.addCustomer();
break;
case 3:
ns.addCustomerWithCustomFields();
break;
case 4:
ns.updateCustomer();
break;
case 5:
ns.upsertCustomer();
break;
case 6:
ns.updateCustomerList();
break;
case 7:
ns.deleteCustomerList();
break;
case 8:
ns.getCustomer();
break;
case 9:
ns.getCustomerList();
break;
case 10:
ns.searchCustomer();
break;
case 11:
ns.addCustomRecord();
break;
case 12:
ns.deleteCustomRecord();
break;
case 13:
ns.searchCustomRecord();
break;
case 14:
ns.getAll();
break;
case 15:
ns.uploadFile();
break;
case 16:
ns.logout();
break;
}
}
} catch (NumberFormatException ex) {
ns._console
.info("\nInvalid choice. Please select once of the following options.");
} catch (ExceededRecordCountFault ex) {
ns._console
.fault("\nExceeded the maximum allowed number of records. "
+ ex.getMessage());
ns._console.info(" [Fault Code]: " + ex.getFaultCode());
} catch (ExceededUsageLimitFault ex) {
ns._console.fault("\nExceeded rat limit. " + ex.getMessage());
ns._console.info(" [Fault Code]: " + ex.getFaultCode());
} catch (InsufficientPermissionFault ex) {
ns._console
.fault("\nYou do not have sufficent permission for this request. "
+ ex.getMessage());
ns._console.info(" [Fault Code]: " + ex.getFaultCode());
} catch (InvalidSessionFault ex) {
ns._console.fault("\nInvalid Session. " + ex.getMessage());
ns._console.info(" [Fault Code]: " + ex.getFaultCode());
} catch (SOAPFaultException ex) {
ns._console
.fault("There was an error processing this request. "
+ ex.getMessage());
ns._console.info(" [Fault Code]: " + ex.getFaultCode());
ns._console.info(" [Fault String]: " + ex.getFaultString());
ns._console.info(" [Fault Actor]: " + ex.getFaultActor());
ns._console.info(" [Fault Detail]: " + ex.getDetail());
} catch (RemoteException ex) {
ns._console.fault("\nRemoteException: " + ex.getMessage());
} finally {
}
}
}
/**
* Logs the user into NetSuite using the login() operation.
*
* @param isAuto -
* flag to indicate whether this is being called from another
* operation
*
* @throws RemoteException
*
*/
public void login(boolean isAuto) throws RemoteException {
if (!_isAuthenticated) {
// Check whether this is a forced login as part of another operation
if (isAuto)
_console.writeLn("\nYou need to first login before invoking this operation ...");
// Populate Passport object with all login information
Passport passport = new Passport();
RecordRef role = new RecordRef();
// Determine whether to get login information from config
// file or prompt for it
if ("true".equals(_properties.getProperty("promptForLogin"))) {
_console.writeLn("\nPlease enter your login information: ");
System.out.print(" E-mail: ");
passport.setEmail(_console.readLn());
System.out.print(" Password: ");
passport.setPassword(_console.readLn());
System.out.print(" Role internalId (press enter for default administrator role): ");
role.setInternalId(_console.readLn());
//passport.setRole(role);
System.out.print(" Account: ");
passport.setAccount(_console.readLn());
} else {
System.out.println("************** In else ::::");
passport.setEmail(_properties.getProperty("login.email"));
passport.setPassword(_properties.getProperty("login.password"));
//role.setInternalId(_properties.getProperty("login.roleinternalId"));
//passport.setRole(role);
passport.setAccount(_properties.getProperty("login.acct"));
}
// Login to NetSuite
_console.info("\nLogging into NetSuite");
_console.info(" Username: " + passport.getEmail());
_console.info(" Account: " + passport.getAccount());
Status status = null;
try {
status = (_port.login(passport)).getStatus();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// Process the response
try{
if (status.isIsSuccess() == true) {
_isAuthenticated = true;
_console.info("\nThe login was successful and a new session has been created.");
} else {
// Should never get here since any problems with the
// login should have resulted in a SOAP fault
_console.info("Login failed");
_console.error(getStatusDetails(status));
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
/**
* Logs a user out using the logout() operation.
*
* @throws RemoteException
*/
public void logout() throws RemoteException {
if (_isAuthenticated) {
_console.info("\nLogging out of NetSuite\n");
// Logout from NetSuite
Status status = (_port.logout()).getStatus();
if (status.isIsSuccess() == true) {
_isAuthenticated = false;
_console.info("Logout successful");
} else {
// Should never get here since any problems with the
// logout should have resulted in a SOAP fault
_console.error(getStatusDetails(status));
}
} else {
_console
.info("\nThe logout() operation cannot be invoked because there is no active session. "
+ "You must be first logged on before attempting to logout.\n");
}
}
private void setPreferences() throws SOAPException
{
// Cast your login NetSuitePortType variable to a NetSuiteBindingStub
NetSuiteBindingStub stub = (NetSuiteBindingStub) _port;
// Clear the headers to make sure you know exactly what you are sending.
// Headers do not overwrite when you are using Axis/Java
stub.clearHeaders();
// Create a new SOAPHeaderElement, this is what the NetSuiteBindingStub
// will accept
// This is the same command for all preference elements, ie you might
// substitute "useDefaults" for "searchPreferences"
SOAPHeaderElement prefHeader = new SOAPHeaderElement(
"urn:messages.platform.webservices.netsuite.com",
"preferences");
Preferences prefs = new Preferences();
prefs.setIgnoreReadOnlyFields(new Boolean(true));
prefHeader.setObjectValue(prefs);
SOAPHeaderElement searchPrefHeader = new SOAPHeaderElement(
"urn:messages.platform.webservices.netsuite.com",
"searchPreferences");
// Create your Actual SearchPreference Object, this contains the
// elements you are allowed to set.
// In this case it is PageSize (for pagination of searches) and
// BodyFieldsOnly (reserved)
SearchPreferences searchPrefs = new SearchPreferences();
searchPrefs.setPageSize(new Integer(_pageSize));
searchPrefs.setBodyFieldsOnly(new Boolean(true));
// setObjectValue applies search preference object to the HeaderElement
searchPrefHeader.setObjectValue(searchPrefs);
// setHeader applies the Header Element to the stub
// Again, note that if you reuse your NetSuitePort object (vs logging in
// before every request)
// that headers are sticky, so if in doubt, call clearHeaders() first.
stub.setHeader(prefHeader);
stub.setHeader(searchPrefHeader);
}
private String getStatusDetails(Status status) {
if (status == null) return "empty status object";
StringBuffer sb = new StringBuffer();
for (int i = 0; i < status.getStatusDetail().length; i++) {
sb.append("[Code=" + status.getStatusDetail()[i].getCode() + "] "
+ status.getStatusDetail()[i].getMessage() + "\n");
}
return sb.toString();
}
}
を正しい口座番号を使用しています
以下は、私が使用していたJavaコードはありますか?プロダクションとサンドボックスは異なるアカウント番号を使用します。 – user3075978
Java/WSDLの初心者なら、あなたを助けることができるいくつかのものがあります。サンプルアプリケーション:http://www.netsuite.com/portal/developers/resources/suitetalk-sample-applications.shtml – Rockstar
はい@ user3075978。私は正しい口座番号を使用しました。 – Neha