You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级NetSuite WSDL至2019.1+后调用WebServices报HTTP 410错误

NetSuite 2023.1 Web服务升级后HTTP 410 Gone错误解决

问题描述

使用org.apache.cxf的wsdl2java Maven工具生成NetSuite 2023.1版本的客户端代码,从2018.1版本升级后,执行搜索、新增、查询等任意操作时,服务器返回HTTP 410: Gone错误。

错误栈信息

The server sent HTTP status code 410: Gone, The server sent HTTP status code 410: Gone
com.sun.xml.ws.transport.http.client.HttpTransportPipe.checkStatusCode(HttpTransportPipe.java:318)
com.sun.xml.ws.transport.http.client.HttpTransportPipe.createResponsePacket(HttpTransportPipe.java:260)
com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:218)
com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:131)
com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:82)
com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1106)
com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1020)
com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:989)
com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:847)
com.sun.xml.ws.client.Stub.process(Stub.java:431)
com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:160)
com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:62)
com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:132)
jdk.proxy2/jdk.proxy2.$Proxy66.search(Unknown Source)

客户端代码片段

nsService = new NetSuiteService(auth.getWebServicesUrl());

_port = nsService.getNetSuitePort();
            
// login header-> equivalent to confProile
Binding bind = ((BindingProvider) _port).getBinding();

@SuppressWarnings("rawtypes")
List<Handler> handlersList = new ArrayList<Handler>();

handlersList.add(new SOAPHandler<SOAPMessageContext>() {

@Override
public boolean handleMessage(SOAPMessageContext context) {
    try {
        Boolean outboundProperty =       
            (Boolean)context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
    if (outboundProperty != null && outboundProperty) {
        Marshaller marshaller = JAXBContext.newInstance(Preferences.class, TokenPassport.class).createMarshaller();

        SOAPEnvelope env = context.getMessage().getSOAPPart().getEnvelope();
        if (CUtls.objIsNotNull(env.getHeader())) {
                env.getHeader().detachNode();
            }
            SOAPHeader header = env.addHeader();

        JAXBElement<TokenPassport> tokentPassportElement =
                     objectFactory.createTokenPassport(auth.getTokenPassport());
        JAXBElement<Preferences> preferenceElement = 
                     objectFactory.createPreferences(auth.getPreferences());

    marshaller.marshal(preferenceElement, header);
                                 
        marshaller.marshal(tokentPassportElement, header);

    }

    } catch (final SOAPException e) {
        Logger.error("SOAPException in handler: {} +> {}", e, CEx.stackTrace(e));
    } catch (JAXBException e) {
        Logger.error("JAXBException in handler: {} +> {}", e, CEx.stackTrace(e));
    } catch (UnsupportedEncodingException e) {
        Logger.error("UnsupportedEncodingException in handler: {} +> {}", e, CEx.stackTrace(e));
    }

        return true;
        }

            @Override
            public boolean handleFault(SOAPMessageContext context) {
                return false;
            }

            @Override
            public void close(MessageContext context) {
            }

            @Override
            public Set<QName> getHeaders() {
                return new TreeSet<QName>();
            }

            });

    bind.setHandlerChain(handlersList);
    BindingProvider bindingprovider = (BindingProvider) _port;
    String endpoint_adr = bindingprovider.getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY).toString();
            
    endpoint_adr = endpoint_adr.replace("https://webservices.netsuite.com", auth.getAccountDomain());

bindingprovider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpoint_adr);

解决方法

核心修复点:将客户端请求的端点地址从通用的https://webservices.netsuite.com替换为NetSuite账户专属的域名地址。

代码中已实现修复逻辑:
从BindingProvider获取默认端点地址后,通过字符串替换将通用地址替换为auth.getAccountDomain()返回的账户专属地址,再将更新后的地址重新设置到请求上下文的BindingProvider.ENDPOINT_ADDRESS_PROPERTY属性中。

内容的提问来源于stack exchange,提问作者devSouth555

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:25:57